Kafka topic leader 均衡
背景
在创建一个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 情况
<table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --describe --topic logdata-es</span><br></pre></td></tr></tbody></table>生成主题列表 json 文件
<table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line"> "partitions":</span><br><span class="line"> [</span><br><span class="line"> {"topic": "logdata-es", "partition": 0},</span><br><span class="line"> {"topic": "logdata-es", "partition": 1},</span><br><span class="line"> {"topic": "logdata-es", "partition": 2},</span><br><span class="line"> {"topic": "logdata-es", "partition": 3},</span><br><span class="line"> {"topic": "logdata-es", "partition": 4},</span><br><span class="line"> {"topic": "logdata-es", "partition": 5}</span><br><span class="line"> ]</span><br><span class="line">}</span><br></pre></td></tr></tbody></table>执行均衡
<table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bin/kafka-preferred-replica-election.sh --zookeeper 127.0.0.1:2181 --path-to-json-file logdata-es-autu.json</span><br></pre></td></tr></tbody></table>再查看 topic 情况
<table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --describe --topic logdata-es</span><br></pre></td></tr></tbody></table>Kafka 有个参数可以控制优先副本选举,即auto.leader.rebalance.enable参数,可以使得Kafka集群自动平衡Leader,只需要在server.properties文件中配置如下设置
总结
Kafka是允许分区保持一定的不均衡的,单个topic的优先副本均衡,也并不能代表整个集群的优先副本均衡
对于手动执行优先副本选举,也建议采取分批次的方式进行,避免同时进行多个大数据量topic的优先副本选举。
参考链接
- kafka对topic leader 进行自动负载均衡
- Kafka优先副本选举
- Kafka集群Leader均衡(Balancing leadership)
- Kafka集群平滑扩容及Leader均衡【实战笔记】
本文转自 https://lihuimintu.github.io/2021/03/10/kafka-leader-reassign/,如有侵权,请联系删除。
