簡體   English   中英

Apache Kafka 中的分區領導者是什么?

[英]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.

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