kafka再平衡机制

所谓的再平衡,指的是在kafka consumer所订阅的topic发生变化时发生的一种分区重分配机制。一般有三种情况会触发再平衡:

consumer group中的新增或删除某个consumer,导致其所消费的分区需要分配到组内其他的consumer上;
consumer订阅的topic发生变化,比如订阅的topic采用的是正则表达式的形式,如test-*此时如果有一个新建了一个topic test-user,那么这个topic的所有分区也是会自动分配给当前的consumer的,此时就会发生再平衡;
consumer所订阅的topic发生了新增分区的行为,那么新增的分区就会分配给当前的consumer,此时就会触发再平衡。

下面是再平衡机制的3种策略:
Round Robin:会采用轮询的方式将当前所有的分区依次分配给所有的consumer;
Range:首先会计算每个consumer可以消费的分区个数,然后按照顺序将指定个数范围的分区分配给各个consumer;
Sticky:这种分区策略是最新版本中新增的一种策略,其主要实现了两个目的:
– 将现有的分区尽可能均衡的分配给各个consumer,存在此目的的原因在于Round Robin和Range分配策略实际上都会导致某几个consumer承载过多的分区,从而导致消费压力不均衡;

再平衡可能导致的问题:
1、可能重复消费: Consumer被踢出消费组,可能还没有提交offset,再平衡时会将Partition重新分配其它Consumer,会造成重复消费,虽有幂等操作但耗费消费资源,亦增加集群压力

2、集群不稳定:再平衡会影响到整个消费者组的所有消费者,因为一个消费者的退出,导致整个Group进行了分区重新分配,并在一个比较慢的时间内达到稳定状态,影响面较大

3、影响消费速度:频繁的触发再平衡降低了消息的消费速度,大部分时间都在重复消费和重新分配分区

避免再平衡的措施:
1、业务需要是不可避免的
(1)针对分区个数的增加, 一般不会常有,是需要增加的时候都是业务及数据需求,不可避免

(2)对Topic的订阅增加或取消亦不可避免

2、合理设置消费者参数

(1)未能及时发送心跳而再平衡

session.timeout.ms 一次session的连接超时时间

heartbeat.interval.ms 心跳时间,一般为超时时间的1/3,Consumer在被判定为死亡之前,能够发送至少 3 轮的心跳请求

(2)Consumer消费超时而Rebalance

max.poll.interval.ms 每隔多长时间去拉取消息。合理设置预期值,尽量间隔时间为消费者处理完业务逻辑的时间,否则就会被coordinator判定为死亡,踢出消费者组,进行再平衡

max.poll.records 一次从拉取出来的数据条数。根据消费业务处理耗费时长合理设置,如果每次max.poll.interval.ms 设置的时间较短,可以max.poll.records设置小点儿,少拉取些,这样不会超时。

尽可能在max.poll.interval.ms时间间隔内处理完max.poll.records条消息,让Coordinator认为消费Consumer还活着

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值