Kafka集群扩容后将数据量大Topic迁移到新的Kafka节点上
背景
最近因数据量上涨,对Kafka集群进行扩容后,需将Topic量大的迁移到新Kafka节点上,缓解集群压力。
操作
Kafka系统提供了一个分区重新分配工具(kafka-reassign-partitions.sh),该工具可用于在Broker之间迁移分区。
生成待迁移topic的json
新建文件topics-to-move.json,包含要迁移到Topic 列表。
1 | cat topic-to-move.json |
generate生成迁移计划
需要指定topics-to-move.json 文件和迁移目标节点的broker id
1 | bin/kafka-reassign-partitions.sh --zookeeper $zklist --topics-to-move-json-file topics-to-move.json --broker-list "$brokerlist" --generate > generate.json |
查看generate.json文件结果类似如下
1 | Current partition replica assignment |
将Current partition replica assignment 的内容保存到rollback-cluster-reassignment.json,用于回滚操作。
将Proposed partition reassignment configuration 的内容保存到expand-cluster-reassignment.json,用于执行迁移操作。
1 | cat generate.json |grep -A1 "Proposed partition reassignment configuration" |tail -1 > expand-cluster-reassignment.json |
迁移执行generate_prop.json
限制带宽大小为500Mb/s
1 | bin/kafka-reassign-partitions.sh --zookeeper $zklist --reassignment-json-file generate_prop.json --execute --throttle 50000000 |
迁移操作会将指定Topic 的数据文件移动到新的节点目录下,这个过程可能需要等待很长时间,视Topic 的数据量而定。
可以运行以下命令查看执行状态。
1 | bin/kafka-reassign-partitions.sh --zookeeper $zklist --reassignment-json-file generate_prop.json --verify |
状态有两种,in progress 表示正在迁移,completed successlly 表示已经成功完成迁移。迁移完成后,原先的节点下将不存在该Topic 的数据文件。
扩展
如果要迁移的Topic 有大量数据(Topic 默认保留1天的数据),可以在迁移之前临时动态地调整retention.ms 来减少数据。
参考链接