![](/img/trans.png)
[英]What are the different scenarios where Kafka Broker tries to elect a leader for a partition?
[英]What is a partition leader in Apache Kafka?
kafka領導者是自己分區還是經紀人? 我最初的理解是,它們是充當讀/寫代理的分區,然后將它們的價值傳遞給 ISR。
但是最近我聽到他們提到它們,好像它們發生在“經紀人”級別,因此我感到困惑。
我知道還有其他帖子旨在回答這個問題,但那里的答案沒有幫助。
這里的一些答案並不絕對正確,所以我想更清楚一點。
每個分區都有一個分區領導者,負責處理該分區的所有讀/寫請求。 (更新:從 Kafka 2.4.0 開始, 消費者可以從副本中讀取)
如果復制因子大於 1,則額外的分區復制充當分區追隨者。
Kafka 保證每個分區副本駐留在不同的代理上(無論是領導者還是跟隨者),因此最大復制因子是集群中代理的數量。
每個分區追隨者都從分區領導者那里讀取消息(就像一種消費者)並且不為該分區的任何消費者提供服務(只有分區領導者提供讀/寫服務)。
如果分區跟隨者從分區領導者讀取記錄沒有滯后並且沒有丟失與 ZooKeeper 的連接(最大滯后默認為 10 秒,ZooKeeper 超時為 6 秒,兩者都是可配置的),則認為它是同步的。
如果分區追隨者滯后或失去與 ZooKeeper 的連接,則認為它不同步。
當分區領導者因任何原因關閉時(例如,代理關閉),其中一個同步的分區追隨者將成為新的領導者。
Kafka 文檔中的復制部分對此進行了詳細說明。
Confluent 還寫了一篇關於這個主題的不錯的博客。
tl;博士
kafka領導者是自己分區還是經紀人?
分區領導者是Kafka Broker 。
分區領導
Kafka Docs中明確提到了這一點:
每個分區都有一個充當“領導者”的服務器和零個或多個充當“跟隨者”的服務器。 領導者處理分區的所有讀寫請求,而追隨者被動地復制領導者。 如果領導者失敗,其中一個追隨者將自動成為新的領導者。 每個服務器充當其某些分區的領導者和其他分區的追隨者,因此負載在集群內得到很好的平衡。
因此,分區領導者實際上是服務於這個目的的代理,負責這個特定分區的所有讀寫請求。
分區領導選舉
特定分區的領導者分配發生在稱為分區領導者選舉的過程中。 當創建主題/分區或分區領導者(即代理)因任何原因不可用時,會發生此過程。
此外,您可以使用Preferred Replica Leader Election Tool強制進行首選副本選舉:
使用復制,每個分區可以有多個副本。 分區的副本列表稱為“分配的副本”。 此列表中的第一個副本是“首選副本”。 創建主題/分區時,Kafka 確保跨主題的分區的“首選副本”在集群中的代理之間平均分布。 在理想情況下,給定分區的領導者應該是“首選副本”。 這保證了集群中代理之間的領導負載是均勻平衡的。 然而,隨着時間的推移,由於代理關閉(由受控關閉、崩潰、機器故障等引起),領導力負載可能會變得不平衡。 該工具有助於恢復集群中代理之間的領導平衡。
為此,您必須運行以下命令:
bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json
topicPartitionList.json
的內容應如下所示:
{
"partitions":
[
{"topic": "topic1", "partition": 0},
{"topic": "topic1", "partition": 1},
{"topic": "topic1", "partition": 2},
{"topic": "topic2", "partition": 0},
{"topic": "topic2", "partition": 1}
]
}
如何找到哪個代理充當分區領導者
為了找到哪個代理充當分區領導者以及哪個充當同步副本(ISR),您必須運行以下命令:
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic myTopic
並且輸出應與以下輸出相同:
Topic:myTopic PartitionCount:4 ReplicationFactor:1 Configs:
Topic: myTopic Partition: 0 Leader: 2 Replicas: 2 Isr: 2
Topic: myTopic Partition: 1 Leader: 3 Replicas: 3 Isr: 3
Topic: myTopic Partition: 2 Leader: 4 Replicas: 4 Isr: 4
Topic: myTopic Partition: 3 Leader: 0 Replicas: 0 Isr: 0
當 Kafka 主題的 --replication-factor 大於 1(這也意味着我們的集群必須具有大於或等於復制因子的代理數)時,分區領導概念有效。
在這種情況下,當生產者將任何消息推送到主題的分區時,請求首先到達分區的領導者(在 Kafka 集群上存在的所有復制分區中)。 它存儲消息並首先將消息復制到其他追隨者分區上,然后將消息的確認發送給生產者。
僅在完成上述過程后,特定消息將可供消費者使用。
我推薦官方鏈接以獲得更多理解。
Kafka 中的所有主題分區都有一個領導者,如果復制因子大於 1,則領導者有追隨者。 可以使用以下命令檢查分區領導者:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe
在此命令的輸出中,分區領導者的代理 ID 顯示為leader: xx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.