Kafka 分区再平衡
背景描述
Kafka 新增节点后,针对已有的 Topic 的分区,系统不会自动将其平衡至新增节点。另外,删除 Kafka 节点时,被删节点可能分布有 Topic 分区,用户需要将这些分区移动至其他节点,才能确保节点的安全删除。
操作步骤
Kafka v3.8.1 及以下版本
针对 Kafka v3.8.1 及以下版本,用户可以在 Kafka Manager 上进行操作。详细操作如下。
-
点击目标 Cluster 名称,进入 Cluster 详情页面。
-
在顶部菜单栏选择 Topic > List,进入 Topic List 页面。
-
点击 Generate Partition Assignments,进入 Confirm Assignments 页面。
-
勾选左侧所有 Topic,勾选右侧所有 Broker,点击 Generate Partition Assignments,系统会根据当前情况自动生成推荐的再平衡分配列表。
-
回到 Topic List 页面。
-
点击 Run Partition Assignments,进入 Run Assignments 页面。
-
点击 Run Partition Assignments,开始再平衡。此操作会把老 Broker 上的部分 Partition 分配到新加入的 Broker 上,让整个集群的流量更均衡。
-
在顶部菜单栏选择 Reassign Partitions,进入 Reassign Partitions 页面,查看结果。
Kafka v3.9.1
针对 Kafka v3.9.1 版本,用户可以使用 Kafka 提供的 Shell 命令为 Topic 重新分配分区。详细操作如下。
-
为已创建的 Kafka 集群,新增节点。详情可参考新增节点。
-
登录 Kafka 客户端节点,详情可参考 VNC 登录客户端节点。
-
执行以下命令行,查看已有的 Topic 列表。
<kafka_dir>/bin/kafka-topics.sh --bootstrap-server <node1_ip>:9092 --list
命令行参数说明
参数 说明 <kafka_dir>
Kafka 安装目录,需根据实际情况进行修改。
--bootstrap-server
可设置一个或多个 Kafka 节点,格式为
<node1_ip>:9092,<node1_ip>:9092,<node1_ip>:9092
,其中<node1_ip>
为 Kafka 节点 IP,均需根据实际情况进行填写。查询示例如下
-
创建
topic.json
文件,保存 Topic,内容如下。其中<topic_1>
与<topic_2>
为上一步命令行的输出结果,需根据实际情况进行修改。{ "version": 1, "topics": [ { "topic": "<topic_1>"}, { "topic": "<topic_2>"} ] }
根据上一步查询示例,
topic.json
文件示例如下{ "version": 1, "topics": [ { "topic": "mytest"}, { "topic": "__consumer_offsets"} ] }
-
执行以下命令行,获取重分配配置。
<kafka_dir>/bin/kafka-reassign-partitions.sh --bootstrap-server <node1_ip>:9092 --topics-to-move-json-file <topic_json_file> --broker-list 1,3,4,6 --generate
命令行参数说明
参数 说明 <kafka_dir>
Kafka 安装目录,需根据实际情况进行修改。
--bootstrap-server
可设置一个或多个 Kafka 节点,格式为
<node1_ip>:9092,<node1_ip>:9092,<node1_ip>:9092
,其中<node1_ip>
为 Kafka 节点 IP,均需根据实际情况进行填写。--topics-to-move-json-file
指定前文创建的
topic.json
文件目录,需根据实际情况进行修改。--broker-list
指定 Topic 存放的目标 Kafka 节点,填写 Broker ID,多个 ID 之间使用逗号
,
隔开。 -
创建
reassignment.json
文件,将上述命令行执行结果中,重分配配置内容拷贝至reassignment.json
文件。重分配配置内容如下红框中所示。 -
执行以下命令行,分区重分配。
<kafka_dir>/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.0.8:9092 --reassignment-json-file reassignment.json --execute
命令行参数说明
参数 说明 <kafka_dir>
Kafka 安装目录,需根据实际情况进行修改。
--bootstrap-server
可设置一个或多个 Kafka 节点,格式为
<node1_ip>:9092,<node1_ip>:9092,<node1_ip>:9092
,其中<node1_ip>
为 Kafka 节点 IP,均需根据实际情况进行填写。--reassignment-json-file
前文创建的
reassignment.json
文件目录,需根据实际情况进行修改。 -
可执行以下命令行,验证分区分配情况。
<kafka_dir>/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.0.8:9092 --reassignment-json-file reassignment.json --verify
命令行参数说明
参数 说明 <kafka_dir>
Kafka 安装目录,需根据实际情况进行修改。
--bootstrap-server
可设置一个或多个 Kafka 节点,格式为
<node1_ip>:9092,<node1_ip>:9092,<node1_ip>:9092
,其中<node1_ip>
为 Kafka 节点 IP,均需根据实际情况进行填写。--reassignment-json-file
前文创建的
reassignment.json
文件目录,需根据实际情况进行修改。输出结果如下所示,
completed
说明重分区已完成。 -
对比 Topic 的分区情况。
-
重分区前
-
重分区后
-