在创建一个topic时,kafka尽量将partition均分在所有的brokers上,并且将replicas也均分在不同的broker上。
每个partitiion的所有replicas叫做”assigned replicas”,”assigned replicas”中的第一个replicas叫”preferred replica”,刚创建的topic一般”preferred replica”是leader。leader replica负责所有的读写。
但随着时间推移,broker可能会停机,会导致leader迁移,导致机群的负载不均衡。
我们期望对topic的leader进行重新负载均衡,让partition选择”preferred replica”做为leader。
image.png
image.png
image.png
image.png
kafka的leader负载均衡默认是关闭的,可以通过配置,开启,如下:
# 是否自动平衡broker之间的分配策略
auto.leader.rebalance.enable = false
# leader的不平衡比例,若是超过这个数值,会对分区进行重新的平衡
leader.imbalance.per.broker.percentage = 10
# 检查leader是否不平衡的时间间隔
leader.imbalance.check.interval.seconds = 300
Kafka有个参数可以控制优先副本选举,即auto.leader.rebalance.enable参数。
在生产中,不建议将这个参数设置为true。
因为自动发生的leader副本选举,在大数据量环境下,可能引发客户端阻塞。而且,Kafka是允许分区保持一定的不均衡的,单个topic的优先副本均衡,也并不能代表整个集群的优先副本均衡。
参考
Kafka topic leader 均衡
https://lihuimintu.github.io/2021/03/10/kafka-leader-reassign
生产经验——Leader Partition 负载平衡
https://www.cnblogs.com/jelly12345/p/16004750.html
kafka replication tools
https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools#Replicationtools-2.PreferredReplicaLeaderElectionTool
kafka中leader和follower、AR、ISR、OSR、Controller的选举、为什么不能通过ZK的方式来选举partition的leader?
https://blog.csdn.net/qq_40585384/article/details/122226683










网友评论