1. kafka rebalance

  rebalance是针对consumer group来说的。consumer group中有多个consumers,当在服务启动阶段,或者新的consumer创建,或者已有consumer宕机,或者parttion变化的情况下会出现rebalance,使得consumers重新分配parittions

 

 如上图,kafka 怎么均匀地分配某个 topic 下的所有 partition 到各个消费者,从而使得消息的消费速度达到最快,这就是平衡(balance)。而 rebalance(重平衡)其实就是重新进行 partition 的分配,从而使得 partition 的分配重新达到平衡状态

 

2. Reblance 流程: 

协调者:

Group Coordinator 是一个服务(比如zookeeper),每个 Broker在启动的时候都会启动一个该服务。Group Coordinator 的作用是用来存储 Group 的相关 Meta 信息,并将对应 Partition 的 Offset 信息记录到 Kafka。

JoinGroup请求 加入consumer group请求

Join 顾名思义就是加入组。这一步中,所有成员都向coordinator发送JoinGroup请求,请求加入消费组。一旦所有成员都发送了JoinGroup请求,coordinator会从中选择一个consumer担任leader的角色,并把组成员信息以及订阅信息发给leader,注意leader和coordinator不是一个概念。leader负责消费分配方案的制定

 

 

 

SyncGroup 请求  分配partition

Join 顾名思义就是加入组。这一步中,所有成员都向coordinator发送JoinGroup请求,请求加入消费组。一旦所有成员都发送了JoinGroup请求,coordinator会从中选择一个consumer担任leader的角色,并把组成员信息以及订阅信息发给leader——注意leader和coordinator不是一个概念。leader负责消费分配方案的制定

 

 

 

3. 避免非必要reblance

控制好consumer向协调者发送心跳频率

当 Consumer Group 完成 Rebalance 之后,每个 Consumer 实例都会定期(heartbeat.interval.ms设置)地向 Coordinator 发送心跳请求,表明它还存活着。heartbeat.interval.m这个值设置得越小,Consumer 实例发送心跳请求的频率就越高

控制好consumer从kafka拉数据时间

max.poll.interval.ms 用于控制 Consumer 实际消费能力对 Rebalance 的影响。它限定了 Consumer 端应用程序两次调用 poll 方法的最大时间间隔。它的默认值是 5 分钟,表示你的 Consumer 程序如果在 5 分钟之内无法消费完 poll 方法返回的消息,那么 Consumer 会主动发起 “离开组” 的请求,Coordinator 也会开启新一轮 Rebalance

 

参考:https://www.pianshen.com/article/33431076149/ 

https://www.cnblogs.com/chanshuyi/p/kafka_rebalance_quick_guide.html

posted on 2022-01-12 11:50  colorfulworld  阅读(160)  评论(0编辑  收藏  举报