0%

Kafka topic leader 均衡

Kafka常见痛点及优化方案


背景

在创建一个topic时,partition会在Broker集群上均分,每个partition的所有replicas叫做”assigned replicas”,”assigned replicas”中的第一个replicas叫”preferred replica”。

刚创建的topic一般”preferred replica”是leader。leader replica负责所有的读写。

随着时间推移,broker可能会停机,会导致leader迁移,导致机群的负载不均衡。需要对topic的leader进行重新负载均衡,让partition选择”preferred replica”做为leader。

简单来说:leader 均衡就是让topic 的分区leader 选择的是优先副本

操作

先查看 topic 情况

1
bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --describe  --topic logdata-es

生成主题列表 json 文件

1
2
3
4
5
6
7
8
9
10
11
{
"partitions":
[
{"topic": "logdata-es", "partition": 0},
{"topic": "logdata-es", "partition": 1},
{"topic": "logdata-es", "partition": 2},
{"topic": "logdata-es", "partition": 3},
{"topic": "logdata-es", "partition": 4},
{"topic": "logdata-es", "partition": 5}
]
}

执行均衡

1
bin/kafka-preferred-replica-election.sh --zookeeper 127.0.0.1:2181 --path-to-json-file logdata-es-autu.json

再查看 topic 情况

1
bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --describe  --topic logdata-es

Kafka 有个参数可以控制优先副本选举,即auto.leader.rebalance.enable参数,可以使得Kafka集群自动平衡Leader,只需要在server.properties文件中配置如下设置

1
2
3
leader.imbalance.check.interval.seconds=300 ,每个300秒检查leader的负载均衡情况
leader.imbalance.per.broker.percentage=10,不平衡性超过阈值就自动触发负载均衡
auto.leader.rebalance.enable=true ,默认是开启的

总结

Kafka是允许分区保持一定的不均衡的,单个topic的优先副本均衡,也并不能代表整个集群的优先副本均衡

对于手动执行优先副本选举,也建议采取分批次的方式进行,避免同时进行多个大数据量topic的优先副本选举。


参考链接