什么是Rebalance
我们知道kafka消费者组所有Consumer都是通过订阅主体所有分区达成共识的。假设有100个分区,消费者组共有20个Consumer,正常情况下,平均会为每个 Consumer 分配 5 个分区。这个分配的过程就叫 Rebalance。
什么是协调者Coordinator
协调者专门为消费者组服务,负责rebalance,成员管理,位移管理等。
Rebalance会造成的问题
- 影响Consumer端口的TPS,在rebalance时,Consumer会停止手头的事情,什么都不干。
- rebalance很慢
- rebalance 效率很低每次 Rebalance 时,Group 下的所有成员都要参与进来,而且通常不会考虑局部性原理(比如一个程序下线,不是把他的5个分区转移而是剩下的9个成员重新分配分区)
其实在真实的业务场景中rebalance是没必要的,通常只有在成员组数量发送变化时候,订阅主题数量发生的时候,订阅主题分区发生变化的时候才会rebalance,在成员数量发生变化我们可以避免rebalance。
非必要的reblanc是因为未能及时发送心跳
设置 session.timeout.ms = 6s。
设置 heartbeat.interval.ms = 2s。
要保证 Consumer 实例在被判定为“dead”之前,能够发送至少 3 轮的心跳请求,即 session.timeout.ms >= 3 * heartbeat.interval.ms。
第二类非必要 Rebalance 是 Consumer 消费时间过长导致的
如数据库延迟过长,影响消费者数据处理
max.poll.interval.ms设置高一点
排除Consumer端的GC表现
- 本文作者: 东方觉主
- 本文链接: http://www.charon193.com/2021/11/20/kafka/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!