Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】
创建,格式如下(以},},},},},配置说明replicas数组中,第一个元素为原副本(保持 leader 不变,减少迁移开销),后两个为新增副本的 broker ID。确保新增的 broker(如 1、2、3)均正常运行,且集群总 broker 数量 ≥ 3(否则无法分配 3 个副本)。log_dirs 用于指定每个副本存放的日志目录,默认用 “any” 表示由 Kafka 自动分配。
·
💻 Kafka运维实战 (17篇)
- 📝Kafka运维实战 17 - kafka 分区副本从 1 增加到 3【实战】
- 📝Kafka运维实战 16 - kafka 分区重新分配【实战】
- 📝Kafka运维实战 15 - kafka 重设消费者组位移入门和实战【实战】
- 📝Kafka运维实战 14 - kafka消费者组消费进度(Lag)深入理解【实战】
- 📝Kafka运维实战 13 - kafka 动态调整Broker, Topic的配置【实战】
- 📝Kafka运维实战 12 - kafka主题管理详解【实战】
- 📝Kafka运维实战 11 - kafka查看消息的具体内容【实战】
- 📝Kafka运维实战 10 -kafka 生产和消费 性能测试工具【实战】
- 📝Kafka运维实战 09 - kafka 生产消息和消费消息用法【实战】
- 📝Kafka运维实战 08 - kafka 3.7脚本工具最全整理汇总【建议收藏】
- 📝Kafka运维实战 07 - kafka 三节点集群部署(混合模式)(KRaft 版本3.7.0)
- 📝Kafka运维实战 06 - kafka 单机部署指南(混合模式)(KRaft 版本3.7.0)
- 📝Kafka运维实战 05 - kafka 消费者组和重平衡(Rebalance)
- 📝Kafka运维实战 04 - Kafka 控制器(Controller)详解:架构、原理与实战
- 📝Kafka运维实战 03 - Kafka 配置参数详解:ZooKeeper 模式与 KRaft 模式对比
- 📝Kafka运维实战 02 - 深入理解 Kafka主题、分区与副本的协同机制
- 📝Kafka运维实战 01 - Kafka入门和基础配置
要将 Kafka 分区的副本数从 1 增加到 3,需要通过 kafka-reassign-partitions.sh 脚本手动指定新的副本分布(无法通过 --generate 自动增加副本数)。以下是具体实现步骤:
核心原理
Kafka 不允许直接通过命令修改副本数,需通过自定义重分配计划,在 JSON 文件中为每个分区指定 3 个副本(包含原副本),然后执行重分配。
实现步骤
步骤 1:创建自定义重分配计划 JSON 文件
创建 reassignment-plan.json,格式如下(以 perf-test-topic 为例):
{
"version": 1,
"partitions": [
{
"topic": "perf-test-topic",
"partition": 0,
"replicas": [3, 1, 2],
"log_dirs": ["any", "any", "any"]
},
{
"topic": "perf-test-topic",
"partition": 1,
"replicas": [2, 1, 3],
"log_dirs": ["any", "any", "any"]
},
{
"topic": "perf-test-topic",
"partition": 2,
"replicas": [3, 1, 2],
"log_dirs": ["any", "any", "any"]
},
{
"topic": "perf-test-topic",
"partition": 3,
"replicas": [1, 2, 3],
"log_dirs": ["any", "any", "any"]
},
{
"topic": "perf-test-topic",
"partition": 4,
"replicas": [1, 2, 3],
"log_dirs": ["any", "any", "any"]
},
{
"topic": "perf-test-topic",
"partition": 5,
"replicas": [2, 1, 3],
"log_dirs": ["any", "any", "any"]
}
]
}
配置说明:
replicas数组中,第一个元素为原副本(保持 leader 不变,减少迁移开销),后两个为新增副本的 broker ID。- 确保新增的 broker(如 1、2、3)均正常运行,且集群总 broker 数量 ≥ 3(否则无法分配 3 个副本)。
- log_dirs 用于指定每个副本存放的日志目录,默认用 “any” 表示由 Kafka 自动分配。
步骤 2:执行重分配计划
运行以下命令执行副本数增加操作:
kafka-reassign-partitions.sh \
--bootstrap-server 192.168.37.10:9092 \ # 替换为你的 broker 地址
--reassignment-json-file reassignment-plan.json \
--execute

执行过程:
- 脚本会启动副本复制,将数据从原副本同步到新增的 2 个副本。
- 过程中主题可正常读写,不影响服务可用性。
步骤 3:检查重分配进度
kafka-reassign-partitions.sh \
--bootstrap-server 192.168.37.10:9092 \
--reassignment-json-file reassignment-plan.json \
--verify
输出显示 Completed 表示成功。

步骤 4:确认副本数
使用 kafka-topics.sh 查看最终副本配置:
kafka-topics.sh \
--bootstrap-server 192.168.37.10:9092 \
--describe \
--topic perf-test-topic
若输出中 ReplicationFactor: 3,则表示副本数已成功从 1 增加到 3。
注意事项
- ** broker 数量要求**:需保证集群中至少有 3 个可用 broker(否则无法分配 3 个副本)。
- 性能影响:副本同步会消耗网络和磁盘 IO,建议在低峰期执行。
- 副本分布均衡:新增副本应尽量分散在不同 broker 上,避免集中到某几个节点导致负载不均。
更多推荐




所有评论(0)