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)了。
img
img
根据第二图不平衡比率计算方法:

  • 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

  1. 组成员发生变更(新consumer加入组、已有consumer主动离开组或已有consumer崩溃)
  2. 订阅主题数发生变更(topic写正则表达式匹配,新增或删除topic有可能会触发rebalance)
  3. 订阅主题的分区数发生变更(扩容partition)
posted @   jiaxzeng  阅读(141)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示