kafka 如何对 topic 分区 replica leader 进行负载均衡
kafka:2.11-1.1.0
一、前言
上一篇文章《必会 | 教你如何重新分布kafka分区、增加分区副本数》,描述了如何重新分配 kafka topic 分区以及增加分区副本数。在最后我留了一个小疑问,如果 kafka leader replica 不停掉的话,如何选择某 replica 为指定leader 呢?
Kakfka 中有个配置:auto.leader.rebalance.enable,默认为 true,默认是一个后台线程会定期检查并触发leader rebalance。详情可参考:https://kafka.apache.org/11/documentation.html#brokerconfigs。
所以,可以先观察一阵,如果分区leader没有自动均衡,可以再继续往下看,使用 kafka-preferred-replica-election.sh 来解决分区 leader 均衡问题。
首先介绍一个概念,叫 preferred replica 。每个 partitiion 的所有 replicas 叫做 “assigned replicas” ,”assigned replicas”中的第一个 replicas 叫 “preferred replica”。
kafka 有提供这样的脚本:kafka-preferred-replica-election.sh,该工具可将每个分区的 Leader replica 转移回 “preferred replica”,它可用于平衡 kafka brokers 之间的 leader 。kafka replica leader 负责处理数据读写请求,如果都集中在一个 broker 上,这样会因为资源的不均衡使用,影响 kafka 读写效率。
二、使用
首先看一下 kafka-preferred-replica-election.sh 的参数介绍:
如果不指定 –path-to-json-file 参数的话,默认操作所有已存在的分区。
如果指定 –path-to-json-file 参数的话,是指定一个文件,文件内容为 json 格式。
1 | ./bin/kafka-preferred-replica-election.sh --zookeeper cdh-worker-1:2181/kafka --path-to-json-file xxx.json |
三、示例
同样还是以 create17 这个 topic 为例,当前,该 topic 详情如下图所示:
Leader 都集中在了 broker 201 上,如果要使 leader replica 负载均衡的话,可以这样做:
创建 preferred-replica-election.json 文件,编辑如下内容,指定了要更改 leader replica 的分区号:
1 | > cat preferred-replica-election.json |
然后执行命令:
1 | ./bin/kafka-preferred-replica-election.sh --zookeeper cdh-worker-1:2181/kafka --path-to-json-file preferred-replica-election.json |
执行结果:
create17 详细信息为:
如上图所示,leader 已经做到了负载均衡了。Leader 的值就是 Replicas 列表值的第一个,也就是 preferred replica 。
四、总结
Kakfka 中有个配置:auto.leader.rebalance.enable,默认为 true,默认是一个后台线程会定期检查并触发leader rebalance。详情可参考:https://kafka.apache.org/11/documentation.html#brokerconfigs。
所以,可以先观察一阵,如果分区leader没有自动均衡,可使用 kafka-preferred-replica-election.sh 来解决 Partition Leader 均衡问题。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2020/11/17/Kafka/kafka-preferred-replica-election.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)