问题描述
当集群中新增加节点时,需要对已有的topic的副本进行迁移,以平衡流量。以公司集群扩增两个节点broker 4和broker 5为例说明操作过程。
问题:怎么做才能做到平滑呢?即尽量做到客户端应用无感知。
为了解决平滑问题,分为三步完成
1.副本均衡设置
对Topic的副本平均分配到各个broker上
2.偏好副本设置
将偏好副本平均分配到各个broker上, 为Leader均衡做准备
3.Leader均衡
执行Leader平衡
要点备注
第一步操作要点
为了不影响客户端使用,保持原有集群Leader副本现状不变,将其他副本平均分配到各个broker上。
副本均衡设置后,需要等待与观察,最终让这些设置的副本进入ISR列表后(新加入的副本跟上了Leader副本数据进度)再执行第二步。
第二步操作要点
在第二步偏好副本设置时,将偏好副本均匀的分布broker上,每个broker上的偏好副本数量=分区总数/broker数量
第三步操作要点
这一步开始实际leader均衡操作
副本均衡设置
查看当前Topic的副本分配情况
bin/kafka-topics.sh –describe –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –topic zto_sign_disfee
1 | Topic:zto_sign_disfee PartitionCount:12 ReplicationFactor:3 Configs: |
准备执行计划的Topic
1 | echo '{"version":1,"topics":[{"topic":"zto_sign_disfee"}]}' > plan02/zto_sign_disfee.json |
生成执行计划
bin/kafka-reassign-partitions.sh –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –topics-to-move-json-file plan02/zto_sign_disfee.json –broker-list “0,1,2,3,4,5” –generate
1 | Current partition replica assignment |
重新分配副本
zto_sign_disfee-reassign.json
1 | { |
执行计划
bin/kafka-reassign-partitions.sh –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –reassignment-json-file plan02/zto_sign_disfee-reassign.json –execute
1 | Current partition replica assignment |
验证
bin/kafka-reassign-partitions.sh –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –reassignment-json-file plan02/zto_sign_disfee-reassign.json –verify
1 | Status of partition reassignment: |
查看topic副本情况
bin/kafka-topics.sh –describe –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –topic zto_sign_disfee
1 | Topic:zto_sign_disfee PartitionCount:12 ReplicationFactor:3 Configs: |
偏好副本设置
准备计划文件
zto_sign_disfee-perf-reassign.json
1 | {"version":1,"partitions":[{"topic":"zto_sign_disfee","partition":11,"replicas":[3,4,1]},{"topic":"zto_sign_disfee","partition":7,"replicas":[4,0,3]},{"topic":"zto_sign_disfee","partition":3,"replicas":[3,4,2]},{"topic":"zto_sign_disfee","partition":1,"replicas":[4,0,3]},{"topic":"zto_sign_disfee","partition":2,"replicas":[5,1,3]},{"topic":"zto_sign_disfee","partition":5,"replicas":[1,4,2]},{"topic":"zto_sign_disfee","partition":4,"replicas":[0,5,3]},{"topic":"zto_sign_disfee","partition":0,"replicas":[2,4,5]},{"topic":"zto_sign_disfee","partition":9,"replicas":[2,1,5]},{"topic":"zto_sign_disfee","partition":8,"replicas":[5,1,0]},{"topic":"zto_sign_disfee","partition":6,"replicas":[1,0,2]},{"topic":"zto_sign_disfee","partition":10,"replicas":[0,2,5]}]} |
执行与验证
bin/kafka-reassign-partitions.sh –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –reassignment-json-file plan02/zto_sign_disfee-perf-reassign.json –execute
bin/kafka-reassign-partitions.sh –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –reassignment-json-file plan02/zto_sign_disfee-perf-reassign.json –verify
Leader均衡
准备计划文件
zto_sign_disfee-leader-reassign.json
1 | {"partitions":[{"topic":"zto_sign_disfee","partition":0},{"topic":"zto_sign_disfee","partition":1},{"topic":"zto_sign_disfee","partition":2},{"topic":"zto_sign_disfee","partition":3},{"topic":"zto_sign_disfee","partition":4},{"topic":"zto_sign_disfee","partition":5},{"topic":"zto_sign_disfee","partition":6},{"topic":"zto_sign_disfee","partition":7},{"topic":"zto_sign_disfee","partition":8},{"topic":"zto_sign_disfee","partition":9},{"topic":"zto_sign_disfee","partition":10},{"topic":"zto_sign_disfee","partition":11}]} |
执行计划
bin/kafka-preferred-replica-election.sh –zookeeper 192.168.x.x:2181,192.168.x.x:2181,192.168.x.x:2181 –path-to-json-file plan02/zto_sign_disfee-leader-reassign.json