目录标题
在 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 列表,一键生成/执行/验证),也可以告诉我。

被折叠的 条评论
为什么被折叠?



