1 | 由于服务器老化原因,需要迁移CDH KAFKA集群中的一台服务器,上面运行有KAFKA服务,假设broker id为536 |
CDH新增KAFKA节点
1 | (1)通过CDH 管理界面在KAFKA集群上新增一个KAFKA角色,并启动KAFKA服务,假设broker id为577 。 |
CDH新增KAFKA节点后,若出现启动错误
1 | 请检查如下配置: |
查看Topic
在有权限的服务器上,查看所有的Topic列表
1 | bin/kafka-topics.sh --zookeeper 10.0.0.133:2181 --describe --list |
查看具体某个Topic分区情况
1 | bin/kafka-topics.sh --zookeeper 10.0.0.133:2181 --describe --topic time |
1 | Topic:time PartitionCount:2 ReplicationFactor:2 Configs: |
创建要迁移的Topic列表
1 | [在有权限执行查看topic命令的机器上操作] |
1 | mkdir -p partner |
生成Topic分区分配表
1 | 使用kafka-reassign-partitions命令生成分区分配表,其中需要指定topics-to-move.json文件和迁移目标节点的broker id |
1 | bin/kafka-reassign-partitions.sh --zookeeper 10.0.0.133:2181 --topics-to-move-json-file ./partner/topics-to-move.json --broker-list "535,577" --generate |
1 | 结果如下: |
1 | 注: |
执行迁移操作
1 | bin/kafka-reassign-partitions.sh --zookeeper 10.0.0.133:2181 --reassignment-json-file partner/expand-cluster-reassignment.json --execute |
1 | 注:迁移操作会将指定Topic 的数据文件移动到新的节点目录下,这个过程可能需要等待很长时间,视Topic 的数据量而定。 |
验证迁移是否成功
1 | bin/kafka-reassign-partitions.sh --zookeeper 10.0.0.133:2181 --reassignment-json-file partner/expand-cluster-reassignment.json --verify |
1 | 迁移状态有两种: |
查看topic详情-再次确认迁移
1 | bin/kafka-topics.sh --zookeeper 10.0.0.133:2181 --describe --topic time |
1 | Topic:time PartitionCount:2 ReplicationFactor:2 Configs: |
排错
1 | 如果某个KFAKA节点已经down掉,而Kafka分区唯一副本恰好在这个节点上,那么执行如上的热迁移分区命令,会一直卡在“in progress表示正在迁移“状态,而不会报错。 |
解决方法:
1 | 问题原因是:KAFKA节点down,分区热迁移导致zk上自动创建了/admin/reassign_partitions,这个残留文件,会导致正常的reassigin都没办法进行,于是只能命令行登陆zk,直接删除该节点 |
zookeeper连接server
1 | bin/zkCli.sh -server 10.0.0.133:2181 |
1 | [zk: localhost:2181(CONNECTED) 0] ls / |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2018/12/06/KAFKA扩容节点和分区迁移-CDH/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!