簡體   English   中英

卡夫卡不公平的領導人選舉-所有分區的相同領導人

[英]Unfair Leader election in Kafka - Same leader for all partitions

我有一個帶有5個分區的Kafka集群。 縮減至3時,領導者選舉進行了數次。

最終,只有一個經紀人成為我主題之一的所有3個分區的領導者。

Topic: test          PartitionCount:3       ReplicationFactor:3
Topic: test Partition: 0    Leader: 2       Replicas: 2,0,1    Isr: 2,1,0
Topic: test Partition: 1    Leader: 2       Replicas: 3,1,2    Isr: 2,1
Topic: test Partition: 2    Leader: 2       Replicas: 4,2,3    Isr: 2

2,1,0是正在運行的代理。

分區0可用2、0、1。所有代理都可用。 因此,isr = 2,1,0

分區1可與3、1、2一起使用,但刪除了3個代理。 所以isr = 2,1

分區2可用於4,2,3,但兩個4,3均已刪除代理。 所以isr = 2

請注意,只有2位當選為領導者。 即使我們假設它在其他代理中具有最高的水印,給定分區的所有ISR也可能已經同步,因此,給定分區的所有ISR都具有相同的偏移量(否則它們將從ISR中刪除)。

我已經等待了很多時間(有一段時間,如果其中一個副本達不到要求,它將被從ISR中刪除),但這仍然是領導者的選舉。

領導者可以平均分配(負載均衡)。

For example, partition-0 leader can be 0
             partition 1 leader can be 1
             partition 2 leader can be 2

為什么不是這樣?

注意:我沒有啟用unclean leader election 僅是默認值。

如果我們假設領導人選舉發生后出現了0.1,那為什么不進行連任呢? 如果更新了ISR,理想情況下,領導者也應該進行更新。 是不是

例如,如果卡夫卡知道0,1已經建立並且具有同步副本,則它應該再次進行一次領導人選舉。

是否有任何特定原因為什么不這樣呢?

Kafka具有首選領導者的概念,這意味着如果可能,它將選擇該副本作為領導者。 副本列表中列出的第一個副本是首選的領導者。 現在查看當前集群狀態:

Topic: test Partition: 0    Leader: 2       Replicas: 2,0,1    Isr: 2,1,0
Topic: test Partition: 1    Leader: 2       Replicas: 3,1,2    Isr: 2,1
Topic: test Partition: 2    Leader: 2       Replicas: 4,2,3    Isr: 2
  • 分區0,經紀人2是首選領導者,並且是當前領導者
  • 分區1,代理3是首選的領導者,但它不是同步的,因此在2和1之間選擇一個隨機的領導者
  • 分區2是代理4的首選領導者,但4又不是同步的。 只有2個處於同步狀態,因此當選。

如果您的所有經紀人都將恢復同步,則默認情況下,Kafka將重新選擇首選領導者(或者可以使用kafka-preferred-replica-election.sh工具強制其kafka-preferred-replica-election.sh ,請參見平衡領導者 )。

如果丟失的代理不會重新啟動,則可以更改分區的副本分配,以使用kafka-reassign-partitions.sh工具手動平衡領導地位 只需確保將首選領導者作為副本列表中的第一項即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM