kafka-rebalance

Kafka 消费者组频繁 Rebalance 的定位

现象

消费停滞、lag 波动,日志频繁出现 Rebalance、Revoking previously assigned partitions。消费者组在 PreparingRebalance 和 Stable 之间反复切换。

快速定位

kafka-consumer-groups --bootstrap-server broker:9092 \
  --describe --group app-worker
kafka-consumer-groups --bootstrap-server broker:9092 \
  --describe --group app-worker --state

消费者日志:

journalctl -u app-worker --since '30 min ago' | grep -i rebalance

常见根因

  1. 单次 poll 处理时间超过 max.poll.interval.ms。
  2. max.poll.records 太大,批量处理过慢。
  3. session.timeout.ms/heartbeat.interval.ms 与网络不匹配。
  4. 消费者频繁重启、滚动发布或实例被驱逐。
  5. 消费者数量变化、分区数变化或订阅关系变化。
  6. 网络抖动、GC 停顿或 broker 负载高。

修复

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. 如何确认消费者组正在频繁 Rebalance?
  2. 最常见的消费端根因是什么?
  3. 减少 Rebalance 的手段有哪些?
答案
  1. 用 kafka-consumer-groups --describe/--state 看组状态在 PreparingRebalance 与 Stable 间切换,并在消费者日志中查 rebalance 记录。
  2. 单次 poll 处理时间超过 max.poll.interval.ms、max.poll.records 过大,或 session.timeout.ms/心跳与网络不匹配。
  3. 降低 max.poll.records、把处理异步化或拆分、调整 session.timeout.ms 与心跳、控制滚动发布节奏,并使用 cooperative-sticky assignor 和静态成员。