kafka rebalance

重平衡是指:对某一主题的消费组下的所有消费者,消费某一个topic下的多个leader分区,建立的消费映射关系达成一致的过程;

  • 发生时机

通常可以理解为3个时机:
1、分区数发生变化,比如由2个partition调整为3个partition;
2、消费者数量发生变化,比如10个消费者,调整为9个消费者;消费者数量变化比较特殊,有可能是真实变化,比如服务真实下线,有可能是伪变化,接下来会一一到来
2.1.1、所谓‘伪下线’是指当消费端没有遵循按照固定频率拉取消息数据,当窗口等待周期超过最大配置时,会被认为消费者不可用
2.1.2、‘真实下线‘是通过消费者和协调者之间的心跳维护的,当满足session.timeout.ms >= n * heartbeat.interval.ms时,也会被认为消费端下线
3、消费主题发生变化

  • 重平衡过程

1、获取Coordinator节点:consumer通过对,groupId.hashcode%__consumer_offsets.partition.num(默认值50),获得一个分区ID,找到该分区对应的副本所在server,则Coordinator即在该节点上
2、选出consumer leader:
2.1、all consumer request->join group ->Coordinator 所有的消费者向协调者发送‘编组请求’
2.2、Coordinator 从众多consumer中选出一个节点,作为该组的leader
2.3、Coordinator向leader节点发送‘所有消费者的信息和带消费的topic’信息
3、消费方案上报
3.1、conumser leader上报消费方案,发送请求syncGroup至‘Coordinator’
3.2、普通conumser发送syncGroup至‘Coordinator’,server端将leader的消费方案进行response响应
4、消费端建立与消费broker间的数据通道,开始消费

  • 如何降低重平衡

重平衡的危害,当发上rebance时候,对于消费者来说整个消费集群是停止消费的,也就是常说的STW(STOP THE WORLD),kafka有重平衡的机制,我们无法完全避免,因此从消费端的吞吐性能来说,要降低概率的发生。
1、合理设置拉取数量,评估每条消息的处理性能,避免在一个session绘画窗口内,不能正常处理完一个批次,最终影响到下一个窗口的拉取时间,导致'伪下线'
2、消费性能提升,处理流程中的一些耗时操作可以采用多线程分片,或者failfast等机制
3、消费端fullgc,合理设置堆空间和回收策略,减少FULLGC的耗时

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章