Kafka Rebalance
Rebalance 分为有两种情况
- leader partition Rebalance
- consumer group Rebalance
这里分别讨论两种 Rebalance 情况。
leader partition Rebalance
生产者和消费者客户端都是通过 Leader
进行读写操作。topic 可以有多个 partition
分区,尽量把读写操作平均分配到所有 broker
节点。达到性能最大化
服务器长期运行过程中,硬件可能有损坏需要停机更换,停机会导致 Kafka
需要停止运行。Kafka
停止的话,原来再这台主机上的 leader partition 就会切换到其他主机上运行。主机处理好了,Kafka 服务正常启动且副本已经追回来的数据。
上面这种情况就会出现 leader partition 不均衡,重启那台主机没有承载读写压力。所以就有了这里说的 leader partition Rebalance
的情况。
leader partition Rebalance 可以手工触发,也可以自动触发。
注意:有触发
leader partition Rebalance
操作的话,会影响消费的情况。
leader partition 自动再平衡
自动触发再平衡是有条件限制的,总共三个参数设置再平衡。由下三个参数
# 是否自动平衡broker之间的分配策略
auto.leader.rebalance.enable = true
# leader的不平衡比例,若是超过这个数值,会对分区进行重新的平衡
leader.imbalance.per.broker.percentage = 10
# 检查leader是否不平衡的时间间隔
leader.imbalance.check.interval.seconds = 300
怎么计算leader的不平衡比例?
举例:一个topic有三个partition。当有一个 broker 挂掉后,故障恢复后 broker 启动正常且副本会追平(ISR)了。
根据第二图不平衡比率计算方法:
- broker1:统计replicas第一个为1(broker编号)且leader不为1(broker编号)的个数 / 该分区分区数 = 不平衡率。显而易见partition为0的第一个副本就是1(broker编号),但是leader不是为1(broker编号)。那么该节点的不平衡率=1/3≈33.3
- broker2:partition为1的第一个副本就是2(broker编号),但是leader也是为2(broker编号)。那么该节点的不平衡率=0/3=0
- berker3:partition为2的第一个副本就是3(broker编号),但是leader也是为3(broker编号)。那么该节点的不平衡率=0/3=0
建议:生产环境不启动 leader partition
再平衡参数,即 auto.leader.rebalance.enable
参数设置为 false
leader partition 手工再平衡
请参考 Partition Leader重新选举 文章
consumer group Rebalance
- 组成员发生变更(新consumer加入组、已有consumer主动离开组或已有consumer崩溃)
- 订阅主题数发生变更(topic写正则表达式匹配,新增或删除topic有可能会触发rebalance)
- 订阅主题的分区数发生变更(扩容partition)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!