bigywater.tech
Kafka 内部原理 · 63

Kafka 扩容:增加 Broker 后数据会自动均衡吗

给集群真实加入第4个broker,验证已有topic不会自动均衡,再用kafka-reassign-partitions.sh --generate生成一份把新broker真实纳入考虑的重新分配方案。

0变化
新broker加入时已有topic真实的副本分布变化
5/6分区
--generate方案里真实用上新broker的分区数

验证:加入新broker,已有topic的副本分布真实一个字节都不会变

这一点本系列《Broker 加入和离开集群时发生什么》已经验证过:新broker加入后,已有topic的Replicas列表真实完全不受影响,不会自动把数据挪过去分摊负载。

验证:--generate真实会把新broker算进候选分配方案

命令 · shell $ cat topics-to-move.json {"version":1,"topics":[{"topic":"leader-demo"}]} $ kafka-reassign-partitions.sh --bootstrap-server localhost:19092 \ --topics-to-move-json-file topics-to-move.json --broker-list "1,2,3,4" --generate
真实实测 · 本机执行输出
Current partition replica assignment
{"partitions":[{"topic":"leader-demo","partition":0,"replicas":[1,2,3]},
                {"topic":"leader-demo","partition":1,"replicas":[2,3,1]}, ...]}

Proposed partition reassignment configuration
{"partitions":[{"topic":"leader-demo","partition":0,"replicas":[1,2,3]},
                {"topic":"leader-demo","partition":1,"replicas":[2,3,4]},  ← 真实用上了broker4
                {"topic":"leader-demo","partition":2,"replicas":[3,4,1]},  ← 真实用上了broker4
                {"topic":"leader-demo","partition":3,"replicas":[4,1,2]},  ← 真实用上了broker4
                {"topic":"leader-demo","partition":4,"replicas":[1,3,4]},  ← 真实用上了broker4
                {"topic":"leader-demo","partition":5,"replicas":[3,4,2]}]} ← 真实用上了broker4
--broker-list参数里真实一旦包含了新加入的broker4,工具生成的方案就会真实把它编织进几乎每一个分区的副本列表——6个分区里5个真实分到了broker4。这份"Proposed"配置本身不会真实生效,--generate只是真实算出一份建议方案并打印出来,需要真实另存成文件、再用--execute才会真正触发数据搬迁(跟《Partition Reassignment》那篇的手动JSON是同一个执行机制,只是这里的JSON是工具自动算出来的,不用自己手写)。

分步演示:从"纹丝不动"到"生成新方案"

每一步都是本文上面用kafka-reassign-partitions.sh --generate跑出来的原始结果。

--generate真实把新broker编织进了几乎每个分区
这一步新验证的状态

    参考与说明

    • 数据来自本机集群加入的第4个真实broker,topic leader-demo(6分区3副本),kafka-reassign-partitions.sh的--generate模式。
    • 和《Broker 加入和离开集群时发生什么》《Partition Reassignment》一起看:三篇真实构成完整的扩容故事——加入不自动均衡,--generate算方案,--execute真正搬数据。
    • 没有验证:真实执行--execute之后大规模数据搬迁对生产流量的影响;Cruise Control这类第三方工具真实提供的更智能的自动均衡策略(按负载而不是简单轮询分配)。
    京ICP备2026067502号-1京公网安备11010502063487号