优先副本的选举
当我们输入以下命令,
kafka-topics.sh --zookeeper zookeeper:2181 --describe --topic test4
查看主题详情时,会展示如下信息
其中 Replicas
就是 AR
。
现,我们将 brokerId 2
的机器重启,kafka
会从 Isr
副本中选出一个新的节点作为 leader
, brokerId
为 2 的机器重启后,只能作为 follower
从上图,可以看到,Partition 1
选出了新的 Leader 3
,从而导致,brokerId 3
负载较高。
为此,kafka
引进 优先副本概念。
优先副本为 Replicas
列表中的第一个节点。对于 Partition 1
来说就是 brokerId 2
的节点。也就是说,Paritition 1
按理 Leader
应该为 2,而非 3。
分区自动平衡
kafka
可在 broker
端,通过 auto.leader.rebalance.enable
控制是否开启分区自动平衡,该参数默认为 true
,即默认开启。
如果开启分区自动平衡,kafka
会定时轮询所有的 broker
节点,计算每个 broker
节点分区不平衡率(不平衡的 leader
数 / 分区总数 )是否超过 leader.imbalance.per.broker.percentage
参数配置的比例,默认为 10%
。如果超过,则自动执行分区平衡。其中,定时轮询任务的执行周期默认为 300秒,由参数 leader.imbalance.check.interval.seconds
。
这里不建议在线上开启分区自动化平衡
分区手动平衡
kafka
中提供 kafka-preferred-replica-election.sh
脚本对 leader
分区重新平衡。
在这里,我们需要对 主题 test4
中的 partition 1
进行重分配
- 创建 test4_election.json 文件(文件自己命名)
{
"partitions": [
{
"partition": 1,