单副本kafka迁移分区
kafka信息:
版本:kafka_2.11-0.10.0.0
备注:单副本
需求:
broker设备上有另外一块硬盘可以使用,所以修改kafka配置,添加一块新硬盘
操作思路:
1.1. 将需要下线的broker分区全部迁移到其他broker
1.2. ./bin/kafka-server-stop.sh
1.3. 修改配置,扩容分区,启动kafka
步骤2介绍的是迁移1个分区怎么操作,在步骤3,会针对此次需求进行总结介绍
2.1 登陆zk获取相关信息,ssh zk设备,
2.2. 查看有哪些brokers
./bin/zkCli.sh -server localhost:8181
执行 ls /brokers/ids
[134, 157, 135, 136, 163, 164]
可以看到有6个broker
2.3. 登陆kafka设备,
2.4. 查看有哪些topic
./kafka-topics.sh --list --zookeeper 10.10.10.1:8181
2.5.查看某一个topic的分区信息。执行这一步是为了先拿一个topic做测试
[work@kafka-136 kafka_2.11-0.10.0.0]$ ./bin/kafka-topics.sh --describe --topic topic-name1 --zookeeper 10.69.59.186:8181|more
Topic:topic-name1 PartitionCount:4 ReplicationFactor:1 Configs:
Topic: topic-name1 Partition: 0 Leader: 157 Replicas: 157 Isr: 157
Topic: topic-name1 Partition: 1 Leader: 163 Replicas: 163 Isr: 163
Topic: topic-name1 Partition: 2 Leader: 164 Replicas: 164 Isr: 164
Topic: topic-name1 Partition: 3 Leader: 134 Replicas: 134 Isr: 134
2.6.将topic-name1的分区,重新迁移一下,此json用于生成迁移策略topics-to-move.json
{"topics": [{"topic": "topic-name1"}],
"version":1
}
2.7.生成一个执行前的迁移计划,保存为./qianyi/qianyi-topic-name1.json
./bin/kafka-reassign-partitions.sh --zookeeper 10.10.10.1:8181 --topics-to-move-json-file ./qianyi/topics-to-move.json --broker-list "156,163" --generate
2.8.开始执行,迁移分区
./bin/kafka-reassign-partitions.sh --zookeeper 10.10.10.1:8181 --reassignment-json-file ./qianyi/qianyi-topic-name1.json --execute
2.9.查看执行迁移的进度
./bin/kafka-reassign-partitions.sh --zookeeper 10.10.10.1:8181 --reassignment-json-file ./qianyi/qianyi-topic-name1.json --verify
Status of partition reassignment:
Reassignment of partition [topic-name1,1] completed successfully #迁移成功
Reassignment of partition [topic-name1,0] is still in progress #正在迁移
Reassignment of partition [topic-name1,3] completed successfully
Reassignment of partition [topic-name1,2] completed successfully
3. 针对此次需求的操作步骤
因为我们是要把某个broker上的所有分区都迁移走,而按照上面的迁移步骤会非常麻烦,并且所有的分区重新分配也占用很多时间和资源,使用下面的步骤来减少时间
3.1步骤2.6的topics-to-move.json文件,把所有topic都写进去(这里只是生成迁移策略文件,我们是想把所有topic都迁走),
{"topics": [{"topic": "ylog_json"},
{"topic": "log"},
{"topic": "log_qa"},
{"topic": "yn"}],
"version":1
3.2生成一个迁移计划,./qianyi/generate.json
generate.json 文件里,Current partition replica assignment下面是当前分区的分布,是用于迁移出问题之后的回滚的,
我们将Current partition replica assignment这部分内容复制到一个另外一个文件里面,单独对需要迁移的broker进行替换,
最后保存为 exec.json
3.3 开始执行 exec.json ,开始迁移
3.4 修改kafka配置文件config/server.properties,添加新分区的路径
log.dirs=/home/work/kafka_2.11-0.10.0.0/log,/data1/kafka_2.11-0.10.0.0/log
3.5 重启kafka
./bin/kafka-server-stop.sh
./bin/kafka-server-start.sh