topic副本扩缩容
kafka并没有提供一个专门的脚本来支持副本的扩缩,不像kafka-topic.sh脚本一样,是可以扩分区的。想要对副本进行扩缩,只能是曲线救国了,利用kafka-reassign-partitions.sh来重新分配副本。
查看主题的详情
./kafka-topics.sh --command-config ../config/sasl.properties --bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 --describe --topic jiaxzeng

扩容副本数
-
生成推荐配置脚本
在进行分区副本重分配之前,最好是用下面方式获取一个合理的分配文件,编写 /tmp/topic-generate.json 文件; 这个文件就是告知想对哪些Topic进行重新分配的计算
{ "topics": [ { "topic": "jiaxzeng" } ], "version": 1 }生成重分配方案
zk_conn=$(awk -F= '/^zookeeper.connect=/ {print $2}' /app/kafka/config/server.properties) ./kafka-reassign-partitions.sh --zookeeper ${zk_conn} --topics-to-move-json-file /tmp/topic-generate.json --broker-list "1,2,3" --generate
-
迁移副本
先将上面截图生成新的分区方案复制到 /tmp/reassignment-file.json 文件
{"version":1,"partitions":[{"topic":"jiaxzeng","partition":2,"replicas":[2],"log_dirs":["any"]},{"topic":"jiaxzeng","partition":1,"replicas":[1],"log_dirs":["any"]},{"topic":"jiaxzeng","partition":0,"replicas":[3],"log_dirs":["any"]}]}修改 /tmp/reassignment-file.json 文件
注意
- 每个 partition 中的 replicas 不能再同一台 broker 主机上。replicas 参数有几个节点,则说明该partition有几个副本数
- log_dirs 参数的个数需要与 replicas 个数一致,或者直接删除该参数。
{"version":1,"partitions":[{"topic":"jiaxzeng","partition":2,"replicas":[3, 2]},{"topic":"jiaxzeng","partition":1,"replicas":[2, 1]},{"topic":"jiaxzeng","partition":0,"replicas":[1, 3]}]}zk_conn=$(awk -F= '/^zookeeper.connect=/ {print $2}' /app/kafka/config/server.properties) ./kafka-reassign-partitions.sh --zookeeper ${zk_conn} --reassignment-json-file /tmp/reassignment-file.json --execute
-
验证迁移副本
该选项用于检查分区重新分配的状态,同时 --throttle 流量限制也会被移除掉。固迁移过程有做限流则必须执行
zk_conn=$(awk -F= '/^zookeeper.connect=/ {print $2}' /app/kafka/config/server.properties) ./kafka-reassign-partitions.sh --zookeeper ${zk_conn} --reassignment-json-file /tmp/reassignment-file.json --verify
检查主题副本数
./kafka-topics.sh --command-config ../config/sasl.properties --bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 --describe --topic jiaxzeng


浙公网安备 33010602011771号