Kafka组消费Rebalance机制

再平衡是指分区的所属权从一个消费者转移到另一个消费者的行为,它为消费者组具备高可用性和伸缩性提供保障,使我们可以既方便又安全地删除消费者组内的消费者或往消费者组内添加消费者。

缺点:
1.再平衡发生期间,消费者组内的消费者无法读取消息
2.Rebalance很慢。如果一个消费者组里面有几百个Consumer实例,Rebalance一次要几个小时
3.在进行再平衡的时候消费者当前的状态也会丢失,offset还未来得及提交。会造成重复消费。

Rebalance发生的时机:
1.消费者组成员数量发生变化
2.订阅主题数量发生变化
3.订阅主题的分区数发生变化

消费者端发生rebalance的原因:
1.Consumer未能及时向Coordinator发送心跳,导致消费者被踢出消费者组。
2.Consumer消费时间过长,超过设置的参数时间。
3.Consumer端频繁的Full GC导致长时间停顿。

Kafka触发Rebalance机制:
消费者组成员发生了变更(新的消费者加入,消费者挂了);
消费者无法在指定的时间内完成消息的消费
消费者组订阅的topic发生了变化
订阅的Topic的分区发生了变化

Coordinator:
每个消费者组都会有一个coordinator,Coordinator负责处理组内的消费者和位移管理,Coordinator并不负责消费者组内的partition分配。消费者通过心跳的方式告知Coordinator自己存活状态。

Rebalance流程:
1.根据消费者组的ID对保存offset主题的分区数求模,计算出将那个分区的节点作为Coordinator。
2.所有消费者或和Coordinator进行交互,请求加入当前消费者组。Coordinator会从所有消费者中随机选择一个消费者作为leader consumer。
3.leader Consumer从Coordinator获取所有的消费者信息,并将消费组订阅的partition分配结果封装为SyncGroup请求(leader consumer不会直接与组内其他消费者交互),leader Consumer将每个消费者的分区信息发送给Coordinator,Coordinator再将消费的分区信息发送给每一个消费者。

每个消费者组都有一个broker负责协调(group coordinator),各个消费者通过发送心跳的方式向组协调者同步状态,当有消费者一定时间没有给组协调者发送心跳或者有新的消费者加入到消费者组是,机会触发消费者组的再平衡。

  1. 新加入消费者触发再平衡
    a. 新加入消费者向组协调者发送joinGroup请求,携带订阅的topic信息
    b. 组协调者收到其他消费者的心跳请求时,在响应中告诉消费者再平衡
    c. 组内原有消费者会重新发送joinGroup到组协调者
    d. 组协调者根据joinGroup请求选择出消费者leader,将topic和分区信息响应给各个消费者
    e. leader消费者将分区分配好
    f. 消费者发送SynGroup请求给协调者请求重新分配好的分区信息,其中消费者leader会携带分配好的分区信息。
    g. 组协调者将分区信息响应给消费者,每个消费者就知道自己负责的消费分区。
  2. 消费者主动离开导致再平衡
    a. 消费者发送leaveGroup请求给组协调者
    b. 组消费者接收组内其他消费者的心跳请求时,在响应中告诉消费者需要再平衡
    c. 消费者重新发送joinGroup请求到组协调者
    d. 组协调者根据发送joinGroup请求选择消费者leader,将topic分区信息响应给各个消费者
    e. 消费者leader将消费者分区分配好
    f. 消费者发送SyncGroup请求给组协调者请求重新分配好的分区信息,其中消费者leader会携带将分配好的分区信息
    g. 组协调者将各个消费者负责的分区信息响应给消费者,完成再平衡。
  3. 消费者失去心跳导致再平衡
    a. 消费者一定时间内没有发送心跳信息给组协调者
    b. 组协调者收到组内其他消费者的心跳请求时,在响应中告诉消费者再平衡
    c. 消费者重新发送joinGroup请求到组协调者
    d. 组协调者选择出消费者leader,将topic和分区信息响应给每个消费者
    e. 消费者leader将分区分配好
    f. 消费者发送SyncGroup请求给组协调者请求新分配好的分区信息,消费者leader会携带分配好的分区信息
    g. 组协调者将给个消费者负责分区信息响应给消费者,在平衡完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kafka使用Rebalance机制来确保消费者群中的消费消费相同数量的分区,并确保消费者在分区分配发生更改时能够正确地处理它们。 当消费者加入或离开群时,Kafka会触发Rebalance过程。在Rebalance过程中,Kafka会重新分配分区以确保每个消费者都消费相同数量的分区。Rebalance的过程可以分为两个阶段: 1. Revoke阶段:在此阶段,Kafka会将消费者正在消费的所有分区的控制权从消费者手中收回。这样可以确保在Rebalance期间不会有任何数据丢失。 2. Assign阶段:在此阶段,Kafka会重新分配分区以确保每个消费者都消费相同数量的分区。Kafka会确保在分配分区时考虑消费者的偏移量,以确保不会重复消费数据。 总的来说,Kafka的Rebalance机制是一种非常强大和可靠的机制,可以确保消费者群中的消费消费相同数量的分区,并确保在分区分配发生更改时能够正确地处理它们。 ### 回答2: Kafka的rebalance机制是指在消费中添加或移除一个消费者时,Kafka如何重新分配分区给消费者。 当有新的消费者加入消费时,Kafka会根据分区的数量和消费消费者数量来重新分配分区。Kafka首先计算出每个消费者应该处理的分区数量,然后将剩余的分区平均分配给所有的消费者。这样可以使得每个消费者处理大致相等的负载。 当有消费者离开消费时,Kafka会将该消费者所处理的分区重新分配给其他消费者。重新分配分区的策略有两种:Range策略和Round-robin策略。Range策略会将离开的消费者处理的分区范围平均分配给其他消费者。Round-robin策略会将离开的消费者处理的分区轮流分配给其他消费者。 在进行rebalance时,Kafka会暂停消费者读取消息,待分配完成后再继续消费。这样可以确保在分配过程中不会丢失消息。而在消费中,每个消费者都会维护一个偏移量,用于记录自己已消费的消息的位置。因此,消费者在重新分配分区后,可以继续从之前的偏移量处开始消费消息,避免重复消费。 总之,Kafka的rebalance机制可以保证消费中的消费者具有相对均衡的负载,并能够在分区重新分配时保证消息的连续性与一致性。这个机制Kafka集群中起到了重要的作用,保证了高可用性和负载均衡的特性。 ### 回答3: Kafka的Rebalance机制是指在消费中加入或退出一个消费者时,Kafka自动重新分配消费者与消费者之间的Topic分区。这个机制的目的是保证消费内的负载均衡,确保每个消费者处理大致相同数量的消息。 当一个消费者加入或退出消费时,Rebalance机制会触发一个重新分配分区的过程。这个过程包括以下几个步骤: 1. 消费者加入或退出:当有一个消费者加入消费时,或者有一个消费者退出消费时,Kafka会进行重新分区。加入消费消费者将被分配新的分区,而退出消费消费者的分区将被重新分配给其它消费者。 2. 再均衡协调者:Kafka集群中会有一个特殊的角色,称为再均衡协调者。这个角色负责协调消费的再均衡过程。它会与消费中的每个消费者进行通信,以决定每个消费者应该被分配哪些分区。 3. 再均衡算法:再均衡协调者使用一种算法来决定分配给每个消费者的分区。这个算法要考虑分区的负载均衡,保证每个消费者处理大致相同数量的消息。具体的算法可以是Round Robin轮询、Range Range、Sticky等。 4. 分区指派:再均衡协调者完成分区的指派后,将结果通知给每个消费者。消费者根据指派结果来分配并处理属于它们的分区。 总之,Kafka的Rebalance机制消费中加入或退出一个消费者时,自动进行分区的重新分配,以保证负载均衡和消费者的高可用性。这个机制可以确保每个消费者处理大致相同数量的消息,提高整个消费的吞吐量和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值