第十三章 kafka专题之Rebalance机制详述

1、Rebalance机制

  • 前提:消费者没有指明分区消费
  • 表现:一直有消费者离线
  • 触发条件:当topic个数发生变化、消费者组的消费者数量减少/增加、分区增加时,就要重新分配partition的分配,从而使得partition的分配达到平衡状态。

2、消费者消费分区的分配策略

2.1、轮询分配

按照消费者组进行轮询分配,将同个消费者监听的所有主题所有partition和所有的consumer都列出来,进行轮询。

在这里插入图片描述

  • 弊端:如果在同一个消费者组内,订阅的消息是不相同的,在执行分区分配的时候不是轮询分配,可能会导致分区分配的不均匀
#实际案例
消费者组:有三个消费者C1,C2,C3,共同订阅了3个主题,t0,t1,t2
topic分区情况:t0一个分区(p0),t1两个分区(p0,p1),t2(p0,p1,p2)

#共同订阅的轮询分配
消费者具体订阅主题情况:3个消费者都订阅t0,t1,t2
轮询分配:C1拿到t0(p0)、t2(p0)/C2拿到t1(p0)、t2(p1)/C3拿到t1(p1)、t2(p2)

#不同订阅的轮询分配
消费者具体订阅主题情况:C1订阅t1,C2订阅了t1,t2,C3订阅了t1,t2,t3
轮询分配方案:C1拿到t0(p0)/C2拿到t1(p0)/C3拿到t1(p1)、t2(p0)、t2(p1)、t2(p2)

在这里插入图片描述

2.2、范围分配

按照主题进行分配,如果不平均分配则对每一个Topi而言,前n个消费者会分配多一个分区。

消费者消费分区数目 = (sum/n) + 1

在这里插入图片描述

2.3、Sticky

在触发了rebalance后,在消费者消费原分区不变的基础上进行调整

消费者1:消费0,1,2
消费者2:消费3,4
消费者3:消费5,6

#消费者3挂掉后

消费者1:仍消费原分区(0,1,2),新消费分区5
消费者2:仍消费原分区(3,4),新消费分区6

在这里插入图片描述

3、Rebalace场景&处理方式

3.1、订阅topic的分区发生变化

(1)业务场景

​ partition扩容,即增加分区数。

(2)处理方式

  • 出现问题:新分区扩容后,consumer并不能自动获取新的分区数,导致数据被写入新的分区,但是没人消费。

  • 解决方案:重启服务即可,rrebalace方式具体根据分区分配策略实现。

3.2、订阅的topic个数发生变化

(1)业务场景

​ 新增业务后,新增topic。

(2)rebalance策略

  • 同上重启服务。
3.3、消费者组内成员个数发生变化

(1)新成员加入

  • 手动操作

(2)组成员离开

  • 手动操作

(3)组成员崩溃

  • 业务场景:集群抖动写入热点导致消费消息过慢

  • 导致原因:主要心跳超时、消费者处理时间过长,导致rebalance。

  • 处理流程:增加消费者处理时间,减少每次处理的消息数。

3.4、原因未知
  • 业务场景:日志没问题,but集群多次rebalance

  • 解决方案:报警设置&手动重启(重启大法好)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

随缘清风殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值