Kafka工作流


截至目前,我們已經了解了Kafka的核心概念。 現在讓我們來看看Kafka的工作流程。

Kafka只是分成一個或多個分割區的主題集合。 Kafka分割區是訊息的線性排序序列,每個訊息由其索引標識(稱為偏移量)。 Kafka叢集中的所有資料都是不相關的分割區聯合。 傳入訊息寫在分割區的末尾,消費者依次讀取訊息。 通過將訊息複製到不同的經紀人來提供永續性。

Kafka以快速,可靠,持久的容錯和零停機方式提供基於發佈訂閱和佇列的訊息傳遞系統。 在這兩種情況下,生產者只需將訊息傳送到一個主題,消費者就可以根據他們的需要選擇任何一種訊息傳遞系統。 可通過下一節中的步驟來了解消費者如何選擇它們的訊息系統。

發布訂閱訊息傳遞的工作流

以下是發布訂閱訊息工作流程的步驟 -

  • 生產者定期向主題傳送訊息。
  • Kafka經紀人將所有訊息儲存在為該特定主題組態的分割區中。 它確保訊息在分割區之間平均分享。 如果製作者傳送兩條訊息並且有兩個分割區,則Kafka將在第一個分割區中儲存一條訊息,並在第二個分割區中儲存第二條訊息。
  • 消費者訂閱特定主題。
  • 當消費者訂閱了一個主題,Kafka將向消費者提供該主題的當前偏移量,並且還將該偏移量儲存在Zookeeper集合中。
  • 消費者會定期請求Kafka(如100小時)收取新訊息。
  • Kafka收到生產者的訊息後,會將這些訊息轉發給消費者。
  • 消費者將收到訊息並進行處理。
  • 當訊息被處理,消費者將向Kafka經紀人傳送確認。
  • Kafka收到確認後,會將偏移量更改為新值並在Zookeeper中更新它。 由於在Zookeeper中維護了偏移量,因此即使在伺服器繁忙期間,使用者也可以正確讀取下一條訊息。
  • 上述流程將重複,直到消費者停止請求。
  • 消費者可以隨時選擇倒帶/跳至期望的主題偏移量並閱讀所有後續訊息。

佇列訊息/消費者組的工作流

在佇列訊息系統(不是單個消費者)中,具有相同組ID的一組消費者將訂閱主題。 簡而言之,訂閱具有相同組ID的主題的消費者被視為單個組,並且訊息在他們之間共用。 讓我們來看看一下這個系統的實際工作流程。

  • 生產者定期向主題傳送訊息。
  • Kafka將所有訊息儲存在為特定主題組態的分割區中,類似於之前的場景。
  • 單個消費者訂閱特定主題,將Group ID設為Group-1
  • Kafka發佈訂閱訊息與消費者進行互動,直到新消費者訂閱同一主題Topic-01,其Group IDGroup-1相同。
  • 一旦新消費者到達,Kafka將其操作切換到共用模式並在兩個消費者之間共用資料。 這種共用將持續到使用者數量達到為該特定主題組態的分割區數量。
  • 當消費者數量超過分割區數量,新消費者將不會收到任何進一步的訊息,直到現有的任何消費者退訂。 這種情況的出現是因為Kafka的每個消費者都將被分配至少一個分割區,並且當所有分割區被分配給現有消費者,新消費者將不得不等待。
  • 這個功能也被稱為消費群。 以同樣的方式,Kafka將以非常簡單和有效的方式提供這兩個系統。

ZooKeeper的角色

Apache Kafka的關鍵依賴是Apache Zookeeper,它是一個分散式組態和同步服務。 Zookeeper作為Kafka經紀人和消費者之間的協調介面。 Kafka伺服器通過Zookeeper叢集共用資訊。 Kafka在Zookeeper中儲存基本後設資料,例如有關主題,經紀人,消費者偏移量(佇列讀取器)等的資訊。

由於所有關鍵資訊都儲存在Zookeeper中,並且它通常在整個叢集中複製這些資料,所以Kafka broker/Zookeeper的故障不會影響Kafka叢集的狀態。當Zookeeper重新啟動,Kafka將恢復狀態。 這給Kafka帶來零停機時間。 Kafka經紀人之間的領導者選舉也是通過在領導者失敗的情況下,使用Zookeeper來完成的。
要了解Zookeeper的更多資訊,請參閱zookeeper教學
讓我們繼續,在下一章中學習如何安裝Java,ZooKeeper和Kafka。