场景:某台机器下线;需将数据迁移到新机器上

Kafka系统提供了一个分区重新分配工具(kafka-reassign-partitions.sh),该工具可用于在Broker之间迁移分区。理想情况下,将确保所有Broker的数据和分区均匀分配。分区重新分配工具无法自动分析Kafka群集中的数据分布并迁移分区以实现均匀的负载均衡。因此,管理员在操作的时候,必须弄清楚应该迁移哪些Topic或分区。

分区重新分配工具可以在3种互斥模式下运行:

  • --generate:在此模式下,给定Topic列表和Broker列表,该工具会生成候选重新分配,以将指定Topic的所有分区迁移到新Broker中。此选项仅提供了一种方便的方法,可在给定Topic和目标Broker列表的情况下生成分区重新分配计划。
  • --execute:在此模式下,该工具将根据用户提供的重新分配计划启动分区的重新分配。 (使用--reassignment-json-file选项)。由管理员手动制定自定义重新分配计划,也可以使用--generate选项提供。
  • --verify:在此模式下,该工具将验证最后一次--execute期间列出的所有分区的重新分配状态。状态可以有成功、失败或正在进行等状态。

Start

原两台机器,broker.id分别为0和2

新添加一条机器;broker.id为3

确定要迁移的topic




kafka assistant怎么用 kafka-reassign-partitions_kafka


topic有两个分区,partition:0分区存储在0,2broker上;

先要将partiiton:0分区迁移到2,3上

第一步

创建topics-to-move.json文件(json文件),并填写如下内容

{"topics":
 [{"topic":"test2"}],
 "version": 1
}

执行generate:

./kafka-reassign-partitions.sh --zookeeper zkServer:2181 --topics-to-move-json-file topics-to-move.json --broker-list "2,3" --generate


kafka assistant怎么用 kafka-reassign-partitions_zookeeper_02


"2,3"为目标broker.id

运行结果(生产两段脚本:当期分区副本分配和建议副本分配配置):


kafka assistant怎么用 kafka-reassign-partitions_kafka assistant怎么用_03


第二步

这个时候,分区操作还没有开始,它只是告诉你当前分区副本配置和建议的分区副本配置。应该保存当前分区副本配置,以防您想要回滚到它。建议的分区副本配置应该保存在一个json文件(例如topic-reassignment.json)

如对任务编写熟悉:可以直接跳过第一步;手动编写建议的分区副本配置

执行execute:

./kafka-reassign-partitions.sh --zookeeper zkServer:2181 --reassignment-json-file topic-reassignment.json --execute

新的任务已经开始执行:


kafka assistant怎么用 kafka-reassign-partitions_kafka assistant怎么用_04


第三步:

判断执行是否完成:

./kafka-reassign-partitions.sh --zookeeper zkServer:2181 --reassignment-json-file topic-reassignment.json --verify

自定义分区和迁移

直接跳过第一步操作

自行编写topic-reassignment.json;

参考:

Apache Kafkakafka.apachecn.org

kafka assistant怎么用 kafka-reassign-partitions_yii 执行指定迁移文件_05