簡體   English   中英

Kafka 分區和 Kafka 副本有什么區別?

[英]What is the difference between Kafka partitions and Kafka replicas?

我創建了 3 個 Kafka 代理設置,代理 ID 為 20、21、22。 然后我創建了這個主題:

bin/kafka-topics.sh --zookeeper localhost:2181 \
  --create --topic zeta --partitions 4 --replication-factor 3

這導致:

在此處輸入圖像描述

當生產者向 zeta 主題發送消息“hello world”時,消息首先被 Kafka 寫入哪個分區?

“hello world”消息在所有 4 個分區中都得到了復制?

3 個代理中的每個代理都包含所有 4 個分區? 在上述情況下,這與 3 的復制因子有何關系?

如果我有 8 個消費者在他們自己的進程中運行或並行訂閱 zeta 主題的線程,Kafka 如何分配分區或代理以並行服務這些?

Kafka 主題在內部被划分為多個分區。 分區允許您通過跨多個代理拆分特定主題中的數據來並行化主題另一方面,副本是您希望在發生故障時實現容錯的每個分區的副本數每個分區都有一個首選領導者處理來自 kafka 客戶端的所有寫入和讀取請求。

如果領導節點發生故障,ISR(同步副本)列表中的一個副本將被提升為領導,直到首選領導節點恢復並趕上自故障以來生成的所有新數據。

回答您的疑問:

當生產者向 zeta 主題發送消息“hello world”時,消息首先被 Kafka 寫入哪個分區?

生產者負責選擇將哪條記錄分配給主題中的哪個分區。 這可以簡單地以循環方式完成以平衡負載,也可以根據某些語義分區 function 來完成。

“hello world”消息在所有 4 個分區中都得到了復制?

消息“hello world”將僅寫入 1 個主題分區,然后復制到該分區的所有副本。

3 個代理中的每個代理都包含所有 4 個分區? 在上述情況下,這與 3 的復制因子有何關系?

每個代理將成為 1 個分區的領導者,另外 3 個將包含該分區的副本。 在您的 output 中,如果您注意到 ISR 列表,則列表中的第一個 id 是分區的當前領導者,另外 2 個是該分區副本所在的追隨者

如果我有 8 個消費者在他們自己的進程中運行或並行訂閱 zeta 主題的線程,Kafka 如何分配分區或代理以並行服務這些?

如果所有 8 個消費者都在同一個消費者組中,那么其中只有 4 個會收到數據。 這是因為分區數為 4。Kafka 確保每個分區僅分配給消費者組中的 1 個消費者。 當分配了分區的消費者崩潰時,該分區被重新分配給另一個消費者。 如果消費者都是獨立客戶端,則將主題的所有 4 個分區分配給每個消費者。

我希望這可以幫到你:)

復制和分區是兩個不同的東西。

復制將在集群中復制相同的數據以獲得更高的可用性/耐用性。 分區是 Kafka 在集群中分發非冗余數據的方式,它會隨着分區的數量而擴展。

當生產者向 zeta 主題發送消息“hello world”時,消息首先被 Kafka 寫入哪個分區?

當您向主題發送“hello world”消息時,默認情況下,您的生產者會根據該消息的鍵(如hash(key) % number_of_partitions )應用散列算法。 如果您沒有提供密鑰,生產者將進行循環,因此無法預測消息將發送到哪些分區。 我猜如果它是第一條消息,它將最終出現在分區 0 中。

“hello world”消息在所有 4 個分區中都得到了復制?

這一條消息將在您的所有副本中復制,但不會復制到 4 個分區

您將在代理 20、21、22 上找到消息。但是,每個分區都有一個領導者,負責對該分區的所有讀取和寫入。 在您的屏幕截圖中,您還可以發現每個分區領導者的代理 ID。 Leader: 21 for partition 0您可以看出該分區的領導者位於代理21上。

3 個代理中的每個代理都包含所有 4 個分區? 在上述情況下,這與 3 的復制因子有何關系?

由於您已將復制因子設置為 3,而集群中總共有 3 個代理,因此所有三個代理都包含所有四個分區。 同樣,分區和副本之間存在差異。 您可以擁有一個帶有單個代理的 Kafka“集群”,並且在主題中仍然有 20 個分區。

如果我有 8 個消費者在他們自己的進程中運行或並行訂閱 zeta 主題的線程,Kafka 如何分配分區或代理以並行服務這些?

這取決於這 8 個消費者是否屬於同一個消費者組 重要的是要知道一個分區最多可以由來自特定消費者組的一個消費者線程讀取。

如果 8 個消費者都屬於同一個組,則其中 4 個會從一個分區(僅從分區領導者)讀取,另外 4 個將處於空閑狀態。

暫無
暫無

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

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