Kafka运维实战 16 - kafka 分区重新分配【实战】
-bootstrap-server <bootstrap-server-list> # KRaft 控制器或 broker 的地址(必填)--broker-list <String: brokerlist> # "0,1,2" (与--topics-to-move-json-file 配合)[--command-config <config-file>] # 客户端配置文件(如认证信息)[--re
- 📝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
kafka-reassign-partitions.sh 脚本用于重新分配主题的分区,包括修改分区的副本分布、增加或减少分区副本等操作。以下是其在 KRaft 模式下的详细用法:
kafka-reassign-partitions.sh 介绍
基本语法
kafka-reassign-partitions.sh
--bootstrap-server <bootstrap-server-list> # KRaft 控制器或 broker 的地址(必填)
--broker-list <String: brokerlist> # "0,1,2" (与--topics-to-move-json-file 配合)
[--command-config <config-file>] # 客户端配置文件(如认证信息)
[--reassignment-json-file <file>] # 包含分区重分配计划的 JSON 文件
[--generate] # 生成建议的重分配计划
[--execute] # 执行重分配计划
[--verify] # 验证重分配是否完成
[--topic <topic-name>] # 指定单个主题(与 --generate 配合)
[--topics-to-move-json-file <file>] # 包含多个待重分配主题的 JSON 文件(与 --generate 配合)
核心参数说明
-
--bootstrap-server
必选参数,指定 KRaft 集群中 broker 或控制器的地址(格式:host:port),用于连接集群。
示例:--bootstrap-server localhost:9092 -
--generate
生成建议的分区重分配计划(仅生成不执行)。需要配合以下参数之一:--topics-to-move-json-file:指定包含多个主题的 JSON 文件(格式见下文)。
生成的计划会考虑当前 broker 负载,建议均衡的副本分布。
-
--reassignment-json-file
指定包含分区重分配计划的 JSON 文件(与--execute或--verify配合)。 -
--execute
执行--reassignment-json-file中定义的重分配计划。 -
--verify
验证--reassignment-json-file中定义的重分配是否完成,并返回结果。
使用步骤(示例)
步骤 1:创建待重分配的主题列表文件
若需重分配多个主题,创建 topics-to-move.json 文件,格式如下:
{
"topics": [
{"topic": "topic1"},
{"topic": "topic2"}
],
"version": 1
}
步骤 2:生成重分配建议
使用 --generate 生成建议的重分配计划:
kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--topics-to-move-json-file topics-to-move.json \
--broker-list "0,1,2" \
--generate
输出说明:
Current partition replica assignment:当前分区副本分布(建议保存,用于回滚)。Proposed partition reassignment configuration:建议的新分布,需保存到文件(如reassignment-plan.json)。
步骤 3:执行重分配计划
使用 --execute 执行生成的计划:
kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file reassignment-plan.json \
--execute
执行过程:
- 脚本会启动分区副本的迁移,过程中主题仍可正常读写。
- 输出会显示重分配的进度,可通过
--verify检查状态。
步骤 4:验证重分配结果
使用 --verify 确认重分配是否完成:
kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file reassignment-plan.json \
--verify
输出说明:
- 若成功,显示
Status of partition reassignment: Completed。 - 若未完成,显示当前进度(如
Reassigning)。
自定义重分配计划(高级用法)
若需手动指定分区副本分布(而非使用 --generate),可直接创建 reassignment-plan.json,格式如下:
{
"version": 1,
"partitions": [
{
"topic": "topic1",
"partition": 0,
"replicas": [1, 2] # 副本所在的 broker ID 列表(第一个为 leader)
},
{
"topic": "topic1",
"partition": 1,
"replicas": [2, 3]
}
]
}
然后执行:
kafka-reassign-partitions.sh \
--bootstrap-server localhost:9092 \
--reassignment-json-file reassignment-plan.json \
--execute
注意事项
-
性能影响:
- 重分配过程会产生网络和磁盘 IO,建议在业务低峰期执行。
- 可通过
--throttle限制迁移速率(需在 JSON 计划中指定throttle字段)。
-
回滚操作:
若重分配失败,可使用步骤 2 中保存的Current partition replica assignment作为计划,重新执行--execute回滚。
实战案例
分区重分配,均衡负载
kafka 集群中,topic perf-test-topic 分区不均衡,2 节点 是三个分区的Leader, 3 节点 是 一个分区的 Leader。分区分配不均衡,现在要通过分区分配,达到平衡。
步骤 1:创建待重分配的主题列表文件
若需重分配多个主题,创建 topics-to-move.json 文件,格式如下:
{
"topics": [
{
"topic": "perf-test-topic"
}
],
"version": 1
}
步骤 2:生成重分配建议
–broker-list:值为要分配的 kafka broker id,以逗号分隔,该参数必不可少。
输出结果中有你当前的分区分配策略,也有 Kafka 期望的分配策略,在期望的分区分配策略里,kafka 已经尽可能的为你分配均衡。但是也不一定符合我们的要求。
Current partition replica assignment
{“version”:1,“partitions”:[{“topic”:“perf-test-topic”,“partition”:0,“replicas”:[2],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:1,“replicas”:[2],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:2,“replicas”:[3],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:3,“replicas”:[1],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:4,“replicas”:[1],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:5,“replicas”:[2],“log_dirs”:[“any”]}]}
Proposed partition reassignment configuration
{“version”:1,“partitions”:[{“topic”:“perf-test-topic”,“partition”:0,“replicas”:[2],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:1,“replicas”:[1],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:2,“replicas”:[2],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:3,“replicas”:[1],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:4,“replicas”:[2],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:5,“replicas”:[1],“log_dirs”:[“any”]}]}

建议的分配计划,不符合我们的需求。
步骤 3:执行重分配计划
使用 --execute 执行生成的计划:
kafka-reassign-partitions.sh \
--bootstrap-server 192.168.37.10:9092 \
--reassignment-json-file reassignment-plan.json \
--execute
保存文件:
[root@test-10 kafka_2.13-3.7.0]# cat reassignment-plan.json
{“version”:1,“partitions”:[{“topic”:“perf-test-topic”,“partition”:0,“replicas”:[3],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:1,“replicas”:[2],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:2,“replicas”:[3],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:3,“replicas”:[1],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:4,“replicas”:[1],“log_dirs”:[“any”]},{“topic”:“perf-test-topic”,“partition”:5,“replicas”:[2],“log_dirs”:[“any”]}]}

步骤 4:验证重分配结果

现在3个Broker分别作为2个分区的Leader。达到了均衡。
更多推荐




所有评论(0)