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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?