Kafka Rebalance

#Kafka [字体 ··]

Rebalance 是指,将一个 Topic 下的多个队列,在同一个消费组的多个成员之间进行重新分配。

比如,一个 Topic 下 8 个队列,只有一个消费者时,一个消费者将处理 8 个队列的消息。如果在组内增加一个消费者,在不重启服务的情况,将 8 个队列分配给两个消费者,从而支持动态的并行处理消息。

Rebalance 的影响

  • 消费暂停:只有一个消费者时,它负责 8 个队列,新增一个消费者后,触发 Rebalance,需要给新消费者分配 4 个队列。第一个消费者停止 4 个队列的消费,等到新消费者分配到 4 个队列后才能继续被消费。
  • 消费重复:一般情况下,防止消费丢失,先消费消息,后更新消费进度,如果 Rebalance 后,当前消费者不再持有正在消费的队列,会持久化消费进度,而消费进度往往滞后于消息消费。Rebalance 完成后,其他消费者会从持久化的进度处继续消费,可能导致消息重复消费。
  • 消费突刺:消息有积压,就可能有消息突刺。由于 Rebalance 可能产生消费暂停、消费重复,导致消息积压,在 Rebalance 后需要处理积压的消息。

Rebalance 典型场景

Rebalance 原因 典型场景
Topic 的队列个数变化 - Broker 宕机
- Broker 升级等运维操作
- 队列的扩容、所容
消费者组内的实例数变化 - 消费者的启动、停止,即新增或者下线消费者
- 消费者异常宕机
- 网络异常导致消费者与 Broker 断开链接,停止上报心跳

See also


博客没有评论系统,可以通过 邮件 评论和交流。