在不停机的情况下,借助kafka自带的命令行工具实现topic分区数量调整(或机器扩/缩容)

1、修改topic的partitions

./kafka-topics.sh \
	--zookeeper 125.210.163.22:2181 \
	--alter \
	--topic <topic name> \
	--partitions 6

2、自己写一个json文件topic.json

{ 
    "topics": [
        {"topic": "<topic name>"}
    ],
    "version": 1
}

3、生成迁移计划

./kafka-reassign-partitions.sh \
	--zookeeper 125.210.163.22:2181 \
	--topics-to-move-json-file topic.json \
	--broker-list "1,2,3,4,5" \
	--generate

注意:--broker-list参数后面填的是brokerid

执行后输出类似下面的结果👇

Current partition replica assignment

{
    "version": 1,
    "partitions": [...]
}

Proposed partition reassignment configuration

{
    "version": 1,
    "partitions": [...]
}

Proposed partition reassignment configuration表示迁移后的消息分区状况

手动将迁移后的json写入一个文件reassignment.json供下一步使用

4、执行迁移计划

./kafka-reassign-partitions.sh \
	--zookeeper 125.210.163.22:2181 \
	--reassignment-json-file reassignment.json \
	--execute

5、查看迁移进度

./kafka-reassign-partitions.sh \
	--zookeeper 125.210.163.22:2181 \
	--reassignment-json-file reassignment.json \
	--verify

最后,可以使用 CMAK 来管理kafka集群