98、简述Kafka的rebalance机制

简述Kafka的rebalance机制

consumer group中的消费者与topic下的partion重新匹配的过程

何时会产生rebalance:

  • consumer group中的成员个数发生变化
  • consumer 消费超时
  • group订阅的topic个数发生变化
  • group订阅的topic的分区数发生变化

coordinator: 通常是partition的leader节点所在的broker,负责监控group中consumer的存活,consumer维持到coordinator的心跳,判断consumer的消费超时

  • coordinator通过心跳返回通知consumer进行rebalance
  • consumer请求coordinator加入组,coordinator选举产生leader consumer
  • leader consumer从coordinator获取所有的consumer,发送syncGroup(分配信息)给到coordinator
  • coordinator通过心跳机制将syncGroup下发给consumer
  • 完成rebalance

leader consumer监控topic的变化,通知coordinator触发rebalance

如果C1消费消息超时,触发rebalance,重新分配后、该消息会被其他消费者消费,此时C1消费完成提交offset.导致错误。
解决办法: coordinator每次rebalance,会标记一个Generation给到consumer,每次rebalance该Generation会+1,consumer提交offset时,coordinator会比对Generation,不一致则拒绝提交

额外补充:

1、什么是 Rebalance
Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 consumer 如何达成一致,来分配订阅 Topic 的每个分区。

例如:某 Group 下有 20 个 consumer 实例,它订阅了一个具有 100 个 partition 的 Topic 。正常情况下,kafka 会为每个 Consumer 平均的分配 5 个分区。这个分配的过程就是 Rebalance。

2:Rebalance触发的机制

有新的消费者加入消费组
有消费者宕机下线。消费者不一定需要真正下线,例如遇到长时间的GC,网络延迟导致消费者长时间未向GroupCoordinator发送心跳等情况,GroupCoordinator会认为消费者已经下线。
消费者组所对应的GroupCoordinator节点发送变更。
消费组内所订阅的任一主题数量或者主题的分区数量发生变化。

你可能感兴趣的:(kafka,分布式,rebalance机制,group,leader,消息队列,coordinator)