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 | { |
执行均衡
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 | leader.imbalance.check.interval.seconds=300 ,每个300秒检查leader的负载均衡情况 |
总结
Kafka是允许分区保持一定的不均衡的,单个topic的优先副本均衡,也并不能代表整个集群的优先副本均衡
对于手动执行优先副本选举,也建议采取分批次的方式进行,避免同时进行多个大数据量topic的优先副本选举。
参考链接