赞
踩
kafka 版本:2.13-3.6.1
topic 名字: topic-A
partition 数量: 3
relica 数量:2
broker数量:2 ;broker.id分别是0,1
topic-B 详细信息展示:
Topic:topic-B Partition: 0 Leader: 0 Replicas: 0,1 Isr: 0,1
Topic:topic-B Partition: 1 Leader: 1 Replicas: 1,0 Isr: 1,0
Topic:topic-B Partition: 2 Leader: 0 Replicas: 0,1 Isr: 0,1
当需要提高系统的可扩展性,提升集群的速率和吞吐量的时候,需要增加机器的数量,当机器数量增加的时候,原本因节点不足导致partition的leader节点分布不均衡的缺陷可以得到解决,这个时候可以使用kafka-reassign-partitions.sh命令来对分区进行重新分配。
注意: Kafka 不会对已存在的分区进行均衡分配,所以需要我们手动通过kafka-reassign-partitions.sh命令执行分区分配操作。
当前集群中有两个节点,id分别为0和1;现在再加一个 broker 节点,id 为 2;现在我们手动将已存在的topic-B的三个分区的leader节点均匀分布在三个节点上,以便实现尽可能的负载均衡,提高写入和消费速度。
cat<<EOF > topic-B-generate.json
{
"topics": [
{
"topic": "topic-B"
}
],
"version": 1
}
EOF
./bin/kafka-reassign-partitions.sh --bootstrap-server ip1:port1,ip2:port2,ip3:port3 --topics-to-move-json-file topic-B-generate.json --broker-list "0,1,2" --generate
其中–broker-list:值为要分配的 kafka broker id,以逗号分隔,该参数必不可少。脚本会根据你的 topic-generate.json 文件,获取 topic 列表,为这些 topic 生成分布在 broker list 上面的分区分配策略。输出结果中有你当前的分区分配策略,也有 Kafka 期望的分配策略,在期望的分区分配策略里,kafka 已经尽可能的为你分配均衡。
Current partition replica assignment 当前的分区分配策略,可以用于备份以及之后的恢复
Proposed partition reassignment configuration kafka生成的一个分配均衡的分配策略,可以用于后续重新分配的执行
一个分配策略示例如下
{"version":1,"partitions":[{"topic":"topic-B","partition":0,"replicas":[0,1] ,"log_dirs":["any","any"]},{"topic":"topic-B","partition":1,"replicas":[1,0] ,"log_dirs":["any","any"]},{"topic":"topic-B","partition":2,"replicas":[0,1] ,"log_dirs":["any","any"]}]}
./bin/kafka-reassign-partitions.sh --bootstrap-server ip1:port1,ip2:port2,ip3:port3 --reassignment-json-file partition-replica-reassignment.json --execute
./bin/kafka-reassign-partitions.sh --bootstrap-server ip1:port1,ip2:port2,ip3:port3 --reassignment-json-file partition-replica-reassignment.json --verify
一般情况下,分区的副本replica数量与节点数量一致,当集群中节点数量增加的时候,一般也需要调整replica的数量,一般是会增大分区副本数,调整方法如下:
{"version":1,"partitions":[{"topic":"topic-B","partition":0,"replicas":[0,1,2] ,"log_dirs":["any","any"]},{"topic":"topic-B","partition":1,"replicas":[1,0,2] ,"log_dirs":["any","any"]},{"topic":"topic-B","partition":2,"replicas":[2,1,0] ,"log_dirs":["any","any"]}]}
其中replicas中存放的是副本所要在的节点,可以通过 调整其数值和顺序来调整replica的数量和leader所在的节点(第一个就是leader所在节点),调整完成之后再进行执行。
注意: replicas中的值列表是broker id,log_dirs中的列表数量需要与replicas列表数量一致;
注意: 每个 partitiion 的所有 replicas 叫做 “assigned replicas” ,“assigned replicas” 中的第一个 replica 叫 “leader”,第二个叫"preferred replica",当 kafka leader replica 挂掉的话,partition 会选择 “preferred replica” 做为 leader replica 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。