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
2
> cat preferred-replica-election.json
{"partitions":[{"topic":"create17","partition":0},{"topic":"create17","partition":1},{"topic":"create17","partition":2},{"topic":"create17","partition":3},{"topic":"create17","partition":4},{"topic":"create17","partition":5},{"topic":"create17","partition":6},{"topic":"create17","partition":7}]}

然后执行命令:

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 均衡问题。