场景:某台机器下线;需将数据迁移到新机器上
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
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
"2,3"为目标broker.id
运行结果(生产两段脚本:当期分区副本分配和建议副本分配配置):
第二步
这个时候,分区操作还没有开始,它只是告诉你当前分区副本配置和建议的分区副本配置。应该保存当前分区副本配置,以防您想要回滚到它。建议的分区副本配置应该保存在一个json文件(例如topic-reassignment.json)
如对任务编写熟悉:可以直接跳过第一步;手动编写建议的分区副本配置
执行execute:
./kafka-reassign-partitions.sh --zookeeper zkServer:2181 --reassignment-json-file topic-reassignment.json --execute
新的任务已经开始执行:
第三步:
判断执行是否完成:
./kafka-reassign-partitions.sh --zookeeper zkServer:2181 --reassignment-json-file topic-reassignment.json --verify
自定义分区和迁移
直接跳过第一步操作
自行编写topic-reassignment.json;
参考:
Apache Kafkakafka.apachecn.org