优先副本是为了解决负载失衡的情况,是指在AR集合列表中的第一个副本,比如分区0的AR集合列表为[1,2,0],那么分区0的优先副本即为1。理想情况下优先副本就是该分区的leader副本
优先副本的选举是指通过一定的方式促使优先副本选举为leader副本,来促进集群的负载均衡,也称为分区平衡
分区平衡并不意味着Kafka集群的负载均衡,因为还要考虑集群中的分区分配是否均衡。更进一步,每个分区的leader副本的负载也是各不相同的
Kafka中提供了分区自动平衡的功能,默认参数为auto.leader.rebalance.enable,默认值为true,开启该功能后,Kafka控制器会启动一个定时任务,该任务会轮询所有broker节点,计算每个节点的分区不平衡率(非优先副本的leader个数/分区总数)是否超过leader.imbalance.per.broker.percentage的值,默认为10%,超过则自动执行优先副本的选举动作,执行周期由leader.imbalance.check.interval.seconds控制,默认300秒
生产中不建议设置自动分区平衡,可能会引起客户端一定程度的阻塞,因为不能自主控制选举操作
kafka-preferred-replica-election.sh脚本提供了对分区leader副本进行重新平衡的功能
kafka-reassign-partitions.sh脚本提供了执行分区重分配的功能
首先创建一个包含主题清单的文件,其次根据主题清单和broker节点清单生成一份重分配方案,最后根据方案执行
kafka-producer-perf-test.sh
kafka-consumer-perf-test.sh
首先创建分区数为1、20、50、100、200、500、1000的主题,副本因子都设置为1
生产者测试:
bin/kafka-producer-perf-test.sh --topic topic-1 --num-records 100000 --records-size 1024 --throughput -1 --producer-props bootstrap.servers=localhost:9092 acks=1
发送速度分别为:
31.10 MB/sec、98.25 MB/sec、104.33 MB/sec、106.38 MB/sec、105.46 MB/sec、93.36 MB/sec、84.92 MB/sec
可以看出并不是分区数越多吞吐量越大,所以可以通过测试找出一个合理的临界值区间,消费者也可以同样验证
原文:https://www.cnblogs.com/jordan95225/p/13394614.html