kafka重平衡发生在kafka的消费组内。众所周知,kafka消费组会包含一个或者多个消费者实例,这些实例共享一个Group-Id;
consumer group下订阅的topic下的每个分区只能分配给某个group下的一个consumer(当然该分区还可以被分配给其他group)。
重平衡指的是一种协议,一个消费者组下的消费者平均分配订阅topic下的分区。很多人会想,使用kafka的时候对提前把consumer消费的topic指定好。而消费组的rebalance 只针对的是topic下的partiction。
那什么时候回发生rebalance?
topic下的分区发生变化的时候,kafka中的分区应该只能新增。
组内的consumer发送变化的时候。kafka会有心跳机制来监听每个consumer的状态
rebalance 是怎么进行的呢?
kafka会存在一个协调者的角色。用来存储消费组的内部消费者的元数据。
发生重平衡的时候,每个消费者会向协调者报告自己要消费的topic,协调者会为每个消费者分配消费的分区。发生重平衡的时候,消费者无法从kafka获取数据,对kafka的TPS会有一定的影响。
rebalance 策略
Range ,平均分配策略。这种分配是基于每个主题的分区分配,topic内的分区平均分配给consumer。
RoundRobin 轮询。这种分配是基于全部主题的分区分配,多个topic内的分区平均分配给consumer。
线上环境应该尽量减少重平衡的发生。。session.timout.ms控制心跳超时时间,heartbeat.interval.ms,控制发送心跳的频率