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 ID與Group-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。