Kafka Rebalance
目录
Rebalance 是指,将一个 Topic 下的多个队列,在同一个消费组的多个成员之间进行重新分配。
比如,一个 Topic 下 8 个队列,只有一个消费者时,一个消费者将处理 8 个队列的消息。如果在组内增加一个消费者,在不重启服务的情况,将 8 个队列分配给两个消费者,从而支持动态的并行处理消息。
Rebalance 的影响
- 消费暂停:只有一个消费者时,它负责 8 个队列,新增一个消费者后,触发 Rebalance,需要给新消费者分配 4 个队列。第一个消费者停止 4 个队列的消费,等到新消费者分配到 4 个队列后才能继续被消费。
- 消费重复:一般情况下,防止消费丢失,先消费消息,后更新消费进度,如果 Rebalance 后,当前消费者不再持有正在消费的队列,会持久化消费进度,而消费进度往往滞后于消息消费。Rebalance 完成后,其他消费者会从持久化的进度处继续消费,可能导致消息重复消费。
- 消费突刺:消息有积压,就可能有消息突刺。由于 Rebalance 可能产生消费暂停、消费重复,导致消息积压,在 Rebalance 后需要处理积压的消息。
Rebalance 典型场景
Rebalance 原因 | 典型场景 |
---|---|
Topic 的队列个数变化 | - Broker 宕机 - Broker 升级等运维操作 - 队列的扩容、所容 |
消费者组内的实例数变化 | - 消费者的启动、停止,即新增或者下线消费者 - 消费者异常宕机 - 网络异常导致消费者与 Broker 断开链接,停止上报心跳 |