主页

索引

模块索引

搜索页面

kafka-preferred-replica-election.sh

用法:

bin/kafka-preferred-replica-election.sh --zookeeper 10.0.55.208:2181/wallet,10.0.55.209:2181/wallet,10.0.55.210:2181/wallet --path-to-json-file afei-preferred.json

注:

如果不带--path-to-json-file就是对所有topic进行preferred replica election

afei-preferred.json:

{
    "partitions": [{
        "topic": "afei",
        "partition": 0
    },
    {
        "topic": "afei",
        "partition": 1
    },
    {
        "topic": "afei",
        "partition": 2
    }]
}

场景:

在创建一个topic时,kafka尽量将partition均分在所有的brokers上,并且将replicas也均分在不同的broker上。
每个partitiion的所有replicas叫做"assigned replicas",
"assigned replicas"中的第一个replicas叫"preferred replica",刚创建的topic一般"preferred replica"是leader。
leader replica负责所有的读写, 其他replica只是冷备状态,不接受读写请求。
但随着时间推移,broker可能会主动停机甚至客观宕机,会发生leader选举迁移,导致机群的负载不均衡。
我们期望对topic的leader进行重新负载均衡,让partition选择"preferred replica"做为leader。

验证:

使用常见一个3个分区3个副本的topic,然后kill掉一个broker。
1. 这时候topic信息如下,我们可以看到broker.id为0的broker上有两个leader:
Topic:afei  PartitionCount:3    ReplicationFactor:3 Configs:
    Topic: afei Partition: 0    Leader: 0   Replicas: 0,1,2 Isr: 0,1,2
    Topic: afei Partition: 1    Leader: 1   Replicas: 1,2,0 Isr: 0,1,2
    Topic: afei Partition: 2    Leader: 0   Replicas: 2,0,1 Isr: 0,1,2

2. 执行kafka-preferred-replica-election.sh脚本后,topic信息如下,leader均匀分布在3个不同的broker上
Topic:afei  PartitionCount:3    ReplicationFactor:3 Configs:
    Topic: afei Partition: 0    Leader: 0   Replicas: 0,1,2 Isr: 0,1,2
    Topic: afei Partition: 1    Leader: 1   Replicas: 1,2,0 Isr: 0,1,2
    Topic: afei Partition: 2    Leader: 2   Replicas: 2,0,1 Isr: 0,1,2

主页

索引

模块索引

搜索页面