kafka集群扩容后的topic分区迁移
kafka集群扩容后,新的broker上面不会数据进入这些节点,也就是说,这些节点是空闲的;它只有在创建新的topic时才会参与工作。除非将已有的partition迁移到新的服务器上面;
所以需要将一些topic的分区迁移到新的broker上。
kafka-reassign-partitions.sh是kafka提供的用来重新分配partition和replica到broker上的工具
简单实现重新分配需要三步:
- 生成分配计划(generate)
- 执行分配(execute)
- 检查分配的状态(verify)
1、安装java环境
tar -xzvf jdk1.8.0_77.tar.gz /data1/bins/
2、添加环境变量
export JAVA_HOME=/data1/bins/jdk1.8.0_77
export JRE_HOME=/data1/bins/jdk1.8.0_77/jre
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
3、部署新节点broken
下载并解压gz包:tar -xzvf kafka_2.11-0.10.1.0.tar.gz -C /data1/bins/
4、修改配置文件:
/data1/bins/kafka_2.11-0.10.1.0/config/server.properties
调整:
- broker.id=67
- port=XX
- host.name=ip
- log.dirs=/data1/kafka/data(需要手动创建相关目录)
5、修改/etc/hosts 映射ip与hostname
6、启动服务
nohup /data1/bins/kafka_2.11-0.10.1.0/bin/kafka-server-start.sh /data1/bins/kafka_2.11-0.8.2.2/config/server.properties &
7、查看当前topic 分区状态:
/data1/bins/kafka_2.11-0.10.1.0/bin/kafka-topics.sh --describe --zookeeper x.x.x.x:2181 --topic story_test_swq_test
8、准备迁移topic(编辑分配json文件)
[root@ movedata]# cat topics-to-move.json
{"topics": [
{"topic": "story_test_swq_test"}
],
"version":1
}
9、生成分配计划
/data1/bins/kafka_2.11-0.10.1.0/bin/kafka-reassign-partitions.sh --zookeeper x.x.x.x:2181 --topics-to-move-json-file /data1/movedata/topics-to-move.json --broker-list "252,67,240,756" --generate
10、将建议分区计划写入文件
11、执行计划
/data1/bins/kafka_2.11-0.10.1.0/bin/kafka-reassign-partitions.sh --zookeeper x.x.x.x:2181 --reassignment-json-file /data1/movedata/reassignment-node.json --execute
12、查看执行状态
/data1/bins/kafka_2.11-0.10.1.0/bin/kafka-reassign-partitions.sh --zookeeper x.x.x.x:2181 --reassignment-json-file /data1/movedata/reassignment-node.json --verify
如何同时迁移多个topic?
答:编译topics-to-move.json(新增字段即可)
{"topics": [
{"topic": "story-zhangxc"},{"topic":"__consumer_offsets"}
],
"version":1
}
部分摘自:
https://www.cnblogs.com/honeybee/p/5691921.html