kafka集群扩容记录
因为我们需要扩容 3 个broker,即broker从 0,1,2,3,4,5 扩容到 0,1,2,3,4,5,6,7,8 ,所以先进行第一部分工作
集群扩容
新机器的 6,7,8 的准备:JAVA、文件句柄数、防火墙、主机名以及hosts映射
从 0,1,2,3,4,5 选一台机器,拷贝其上的 kafka 安装目录到 6,7,8 三台机器,删除其中的logs目录,修改 server.properties 文件中的 broker.id 项。
新机器启动kafka:
sh kafka-server-start.sh -daemon ../config/server.properties
检查新broker是否加入成功,检查zookeeper上的/broker/ids下的node是否包含新增broker.id
准备工作
查看现有Topic的partition、副本以及leader和follower分布。
1 | [root@gs-kafka1 kafka_2.11-0.10.2.1]# bin/kafka-topics.sh --describe --zookeeper gs-kafka1:2181 --topic WATCH-LOCATION |
因为现有topic的副本及其leader都在 0,1,2,3,4,5 broker,所以我们需要迁移三分之一的副本到新broker,并且将三分之一的leader转到新broker,才能做到网络和磁盘IO的扩容。
迁移
参考扩容方案中的方法,我们直接编辑 topic-result.json,格式如下
1 | {"version":1,"partitions":[{"topic":"WATCH-LOCATION","partition":0, "replicas":[4,2,6]}, |
但是上述只考虑到了副本迁移,未考虑到leader迁移,参考扩容方案,我们迁移的时候顺便 修改replicas顺序,修改如下:
1 | {"version":1,"partitions":[{"topic":"WATCH-LOCATION","partition":0, "replicas":[4,2,6]}, |
其他 topic 也可参考此方法一起修改副本位置和副本顺序。然后开始迁移
1 | bin/kafka-reassign-partitions.sh --zookeeper gs-kafka1:2181 --reassignment-json-file topic-result.json --execute |
等所有topic迁移完成后,开始leader迁移,两个方法
- 一次性平衡所有topic
bin/kafka-preferred-replica-election.sh --zookeeper gs-kafka1:2181
- 每次平衡部分topic,编写 topicPartition.json ,格式如下。然后平衡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{"version":1,"partitions":[{"topic":"WATCH-LOCATION","partition":0},
{"topic":"WATCH-LOCATION","partition":1},
{"topic":"WATCH-LOCATION","partition":2},
{"topic":"WATCH-LOCATION","partition":3},
{"topic":"WATCH-LOCATION","partition":4},
{"topic":"WATCH-LOCATION","partition":5},
{"topic":"WATCH-LOCATION","partition":6},
{"topic":"WATCH-LOCATION","partition":7},
{"topic":"WATCH-LOCATION","partition":8},
{"topic":"WATCH-LOCATION","partition":9},
{"topic":"WATCH-LOCATION","partition":10},
{"topic":"WATCH-LOCATION","partition":11},
{"topic":"WATCH-LOCATION","partition":12},
{"topic":"WATCH-LOCATION","partition":13},
{"topic":"WATCH-LOCATION","partition":14},
{"topic":"WATCH-LOCATION","partition":15},
{"topic":"WATCH-LOCATION","partition":16},
{"topic":"WATCH-LOCATION","partition":17}
]}bin/kafka-preferred-replica-election.sh --zookeeper gs-kafka1:2181 --path-to-json-file topicPartition.json