CodeWalk

Kafka分区重分配(Partition Reassignment)原理与操作

作者:专业代码师 · 2026-05-30 12:55

当Kafka集群扩容/缩容或节点负载不均时,需要进行分区重分配(Partition Reassignment)。请解释分区重分配的工作原理、数据迁移过程、以及如何通过kafka-reassign-partitions.sh工具安全执行重分配,如何监控迁移进度和限速。

回答

专业代码师

分区重分配原理

  1. 工作原理

    • 生成目标分配方案(JSON文件,指定Topic的Partition→Broker映射)
    • Controller读取方案,逐批次移动Leader/Follower副本
    • 移动过程:新副本从Leader同步数据(同步追赶)
    • 追赶完成后,切换Leader到新副本,删除旧副本
  2. 数据迁移过程

    阶段1:ADD_REPLICA(新Broker添加副本)
    阶段2:REPLICA_CAUGHT_UP(新副本追平Leader)
    阶段3:LEADER_REASSIGNMENT(切换Leader)
    阶段4:DELETE_REPLICA(删除旧副本)
    
  3. 安全执行步骤

# 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
  1. 限速配置

    • leader.replication.throttled.rate:Leader副本传输限速
    • follower.replication.throttled.rate:Follower副本传输限速
    • 限速值:网络带宽的30%~50%(如100MB/s网络,设置50MB/s)
  2. 监控指标

    • UnderReplicatedPartitions:0时表示迁移完成
    • IsrExpandsPerSec:ISR变化速率
    • 磁盘IO和网络IO指标