簡體   English   中英

Kafka Consumer 左消費組

[英]Kafka Consumer left consumer group

我在使用 Kafka 時遇到了一些問題。 任何幫助深表感謝! 我在 docker swarm 中有 zookeeper 和 kafka 集群 3 個節點。 您可以在下面看到 Kafka 代理配置。

  KAFKA_DEFAULT_REPLICATION_FACTOR: 3
  KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
  KAFKA_MIN_INSYNC_REPLICAS: 2
  KAFKA_NUM_PARTITIONS: 8
  KAFKA_REPLICA_SOCKET_TIMEOUT_MS: 30000
  KAFKA_REQUEST_TIMEOUT_MS: 30000
  KAFKA_COMPRESSION_TYPE: "gzip"
  KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
  KAFKA_HEAP_OPTS: "-Xmx768m -Xms768m -XX:MetaspaceSize=96m"

我的情況:

  • 20x Producers 不斷地向 kafka 主題生成消息
  • 1x 消費者讀取和記錄消息
  • 殺死 kafka 節點(docker 容器停止),所以現在集群有 2 個 Kafka 代理節點(第 3 個將自動啟動並加入集群)
  • 而消費者不再消費消息,因為它由於重新平衡而離開了消費者組

是否存在任何機制來告訴消費者在重新平衡后加入組?

日志:

 INFO 1 --- [ | loggingGroup] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=kafka-consumer-0, groupId=loggingGroup] Attempt to heartbeat failed since group is rebalancing
 WARN 1 --- [ | loggingGroup] o.a.k.c.c.internals.AbstractCoordinator : [Consumer clientId=kafka-consumer-0, groupId=loggingGroup] This member will leave the group because consumer poll timeout has expired. This means the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time processing messages. You can address this either by increasing max.poll.interval.ms or by reducing the maximum size of batches returned in poll() with max.poll.records.

@Rostyslav 每當我們通過消費者調用讀取消息時,它會進行 2 個主要調用。

  1. 輪詢
  2. 犯罪

Poll 基本上是從 kafka 主題中獲取記錄,並且 commit 告訴 kafka 將其保存為已讀消息,以免再次讀取。 雖然輪詢少數參數起着主要作用:

  1. max_poll_records
  2. max_poll_interval_ms

僅供參考:變量名是每個 python api。

因此,每當我們嘗試從 Consumer 讀取消息時,它都會在每個 max_poll_interval_ms 進行一次輪詢調用,並且只有在處理了獲取的記錄(如 max_poll_records 中定義)之后才會進行相同的調用。 因此,每當 max_poll_records 未在 max_poll_inetrval_ms 中處理時,就會出現錯誤。

為了克服這個問題,我們需要改變兩個變量之一。 更改 max_poll_interval_ms c 可能會很忙,因為有時處理某些記錄可能需要更長的時間,有時處理更少的記錄。 我總是建議使用 max_poll_records 來解決這個問題。 這對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM