Kafka 分区重分配执行流程(同集群)

在 Kafka 中执行**分区重分配(Partition Reassignment)**的标准流程如下,适用于将主题的分区副本从某些 Broker 迁移到其他 Broker,比如:

  • 添加新 Broker 后做负载均衡
  • 旧 Broker 下线、迁移数据
  • 提升副本因子或优化数据分布

✅ Kafka 分区重分配执行流程(同集群)

在这里插入图片描述
在这里插入图片描述

使用官方脚本 kafka-reassign-partitions.sh(位于 bin/ 目录)


🔧 前提条件

  • 已知 Kafka 启动的 Broker ID,例如 0、1、2、3…
  • 集群已正常运行,并能通过 --bootstrap-server 访问
  • 使用 Kafka 2.4 及以上版本(推荐)

🚀 步骤详解


Step 1️⃣:创建需要迁移的主题列表文件(JSON)

topics-to-move.json

{
  "topics": [
    { "topic": "your-topic-name" }
  ],
  "version": 1
}

在这里插入图片描述


Step 2️⃣:生成新的分区副本分配方案

假设你现在有 Broker ID 为:0, 1, 2

bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --topics-to-move-json-file topics-to-move.json \
  --broker-list "0,1,2" \
  --generate > reassign-plan.json

📌 输出中会包含

  • currentAssignment: 当前副本分配方案
  • proposedAssignment: 推荐的副本迁移方案

你可根据需要手动修改 proposedAssignment

在这里插入图片描述
在这里插入图片描述

The file should contain only the proposed reassignment configuration

{
  "version": 1,
  "partitions": [
    {
      "topic": "test-topic",
      "partition": 0,
      "replicas": [0],
      "log_dirs": ["any"]
    }
  ]
}

Step 3️⃣:执行迁移任务

在这里插入图片描述

确认 reassign-plan.json 中的副本列表符合预期后执行:

bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassign-json-file reassign-plan.json \
  --execute

Kafka 会开始将分区副本迁移到目标 Broker(通过内部数据复制完成)。
在这里插入图片描述


Step 4️⃣:验证迁移是否完成

可持续观察迁移状态是否完成:

bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassign-json-file reassign-plan.json \
  --verify

如果输出为 is reassignment complete,说明迁移完成。

在这里插入图片描述


✅ 示例:完整命令流程(含创建文件)

# 创建 JSON 文件
cat > topics-to-move.json <<EOF
{
  "topics": [
    { "topic": "orders" }
  ],
  "version": 1
}
EOF

# 生成分配方案
bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --topics-to-move-json-file topics-to-move.json \
  --broker-list "0,1,2,3" \
  --generate > reassign-plan.json

# 执行迁移
bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassign-json-file reassign-plan.json \
  --execute

# 验证完成情况
bin/kafka-reassign-partitions.sh \
  --bootstrap-server localhost:9092 \
  --reassign-json-file reassign-plan.json \
  --verify

📌 补充说明与建议

场景说明
🔄 增加副本因子需修改 replicas 列表,手动指定新的副本 Broker ID。
⛔ 不建议迁移大量主题同时执行容易造成网络和磁盘负载高,建议分批迁移。
✅ 可配合 --throttle 参数控制迁移带宽,减小对业务影响(如 Kafka 3.x 支持)。
🔍 观察迁移状态可用 kafka-topics.sh --describe 查看每个分区的 Leader/ISR 状态。
📊 更推荐结合监控使用如 Prometheus、Kafka UI 或 Kafka Manager 查看数据副本同步状态。

如你希望我生成一个自动化的 Bash 脚本模板(支持输入主题名称 + Broker 列表,一键生成/执行/验证),也可以告诉我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值