2016-01-13 106 views
0

我對Apache Kafka中的Topic分區有點困惑。所以我正在繪製一個簡單的用例,我想知道在不同場景下會發生什麼。所以這裏是:Apache Kafka主題分區消息處理

我有一個主題T有4個分區TP1,TP2,TP4和TP4。

假設我有8條消息M1到M8。現在,當我的製作人將這些消息發送到主題T時,在以下情況下,他們將如何被卡夫卡經紀人接收:

情況1:只有一個卡夫卡經紀人實例具有前述分區的主題T.

場景2:有兩個kafka代理實例,每個節點具有與上述分區相同的Topic T。

現在假設卡夫卡經紀人實例1出現故障,消費者將如何反應?我假設我的消費者正在從經紀人實例1閱讀。

回答

2

我會通過分區複製來回答您的問題,因爲您需要了解複製以瞭解答案。

單個代理被認爲是給定分區的「領導者」。所有的產品和消費與領導者一起發生。分區的副本被複制到可配置數量的其他代理。領導處理將產品複製到其他副本。其他追溯到領導者的複製品稱爲「同步複製品」。您可以配置「追上」的含義。

消息在提交給所有同步副本時纔會提供給消費者。

如果給定分區的領導失敗,卡夫卡協調員將從同步複製列表中選出一位新領導,消費者將開始從這位新領導消費。消費者在新領導人當選時會有幾毫秒的附加延遲。如果協調員失敗,新的協調員也會自動選出(這也增加了更多的延遲)。

如果該主題配置了沒有副本,那麼當給定分區的領導失敗時,消費者無法從該分區消費,直到作爲領導的代理重新聯機爲止。或者,如果它永遠不會恢復到在線狀態,那麼以前生成到該分區的數據將永遠丟失。

直接回答你的問題:

  • 方案1:如果複製配置爲話題,並且存在一個同步副本爲每個分區,新領軍者年會選舉產生,而消費者由於失敗,將僅經歷幾毫秒的延遲。
  • 方案2:現在你瞭解複製,我相信你會看到這個場景是方案12複製的因素。

您可能也有興趣瞭解在生產約acks

在生產中,可以配置acks這樣當產品被確認:

  • 消息被提上了製片人的socket緩衝區(acks=0
  • 消息被寫入日誌的鉛經紀人(acks=1
  • 消息被寫入到日誌引線經紀人,並複製到所有其他在同步副本(acks=all

此外,您可以配置提交產品所需的最小數量的同步副本。然後,如果在此配置下沒有足夠的同步副本,則產品將失敗。你可以建立你的製片人以不同的方式處理這個失敗:緩衝,重試,什麼也不做,阻止等等。

相關問題