kafka集群扩容后的topic分区迁移
kafka集群扩容后,新的broker上面不会数据进入这些节点,也就是说,这些节点是空闲的;它只有在创建新的topic、或对原有topic增加分区时才会参与工作。因此我们需要将已有的partition迁移到新的broker上面。
kafka-reassign-partitions.sh是kafka提供的用来重新分配partition和replica到broker上的工具简单实现重新分配需要三步:
- 生成分配计划(generate)
- 执行分配(execute)
- 检查分配的状态(verify)
创建一个测试topic
bin/kafka-topics.sh --zookeeper 10.10.17.210:2181,10.10.17.210:2182,10.10.17.210:2183/kafka-test --create --topic topic1 --replication-factor 3 --partitions 5
查看topic分区情况
bin/kafka-topics.sh --zookeeper 10.10.17.210:2181,10.10.17.210:2182,10.10.17.210:2183/kafka-test --topic topic1 --describe
先看topic情况,这里有topic1 5个分区 3个副本
a.生成分配计划
vi topics-to-move.json
{
"topics":[{"topic":"topic1"}],
"version":1
}
bin/kafka-reassign-partitions.sh --zookeeper 10.10.17.210:2181,10.10.17.210:2182,10.10.17.210:2183/kafka-test --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2,3,4" --generate
(注:命令后的--zookeeper 换成 --bootstrap-server 更好)
b.执行分配
vi topic-reassignment.json
把上面Proposed partition reassignment configuration 复制到上面topic-reassignment.json文件中
执行
bin/kafka-reassign-partitions.sh --zookeeper 10.10.17.210:2181,10.10.17.210:2182,10.10.17.210:2183/kafka-test --reassignment-json-file topic-reassignment.json --execute (--throttle 1024000)
throttle :限制流量单位字节
(注:命令后的--zookeeper 换成 --bootstrap-server 更好)
c.查看重新分区进度
bin/kafka-reassign-partitions.sh --zookeeper 10.10.17.210:2181,10.10.17.210:2182,10.10.17.210:2183/kafka-test --reassignment-json-file topic-reassignment.json --verify
completed successfully 表示已完成
is still in progress 表示进行中
d.最后看看topic分区情况
最后查看分区情况,看看是否迁移成功