Kafka分区重分配(Partition Reassignment)原理与操作
当Kafka集群扩容/缩容或节点负载不均时,需要进行分区重分配(Partition Reassignment)。请解释分区重分配的工作原理、数据迁移过程、以及如何通过kafka-reassign-partitions.sh工具安全执行重分配,如何监控迁移进度和限速。
回答
专业代码师
分区重分配原理:
-
工作原理:
- 生成目标分配方案(JSON文件,指定Topic的Partition→Broker映射)
- Controller读取方案,逐批次移动Leader/Follower副本
- 移动过程:新副本从Leader同步数据(同步追赶)
- 追赶完成后,切换Leader到新副本,删除旧副本
-
数据迁移过程:
阶段1:ADD_REPLICA(新Broker添加副本) 阶段2:REPLICA_CAUGHT_UP(新副本追平Leader) 阶段3:LEADER_REASSIGNMENT(切换Leader) 阶段4:DELETE_REPLICA(删除旧副本) -
安全执行步骤:
# 1. 生成迁移方案
kafka-reassign-partitions.sh
--bootstrap-server localhost:9092
--generate
--topics-to-move-json-file topics.json
--broker-list "1,2,3" > plan.json
# 2. 执行迁移
kafka-reassign-partitions.sh
--bootstrap-server localhost:9092
--execute
--reassignment-json-file plan.json
# 3. 监控进度
kafka-reassign-partitions.sh
--bootstrap-server localhost:9092
--verify
--reassignment-json-file plan.json
# 4. 取消(如需要)
kafka-reassign-partitions.sh
--bootstrap-server localhost:9092
--cancel
--reassignment-json-file plan.json
-
限速配置:
leader.replication.throttled.rate:Leader副本传输限速follower.replication.throttled.rate:Follower副本传输限速- 限速值:网络带宽的30%~50%(如100MB/s网络,设置50MB/s)
-
监控指标:
UnderReplicatedPartitions:0时表示迁移完成IsrExpandsPerSec:ISR变化速率- 磁盘IO和网络IO指标