
- Apache Kafka 教程
- Apache Kafka - 首頁
- Apache Kafka - 簡介
- Apache Kafka - 基礎知識
- Apache Kafka - 叢集架構
- Apache Kafka - 工作流程
- Apache Kafka - 安裝步驟
- Apache Kafka - 基本操作
- 簡單的生產者示例
- 消費者組示例
- 與 Storm 整合
- 與 Spark 整合
- 即時應用(Twitter)
- Apache Kafka - 工具
- Apache Kafka - 應用
- Apache Kafka 有用資源
- Apache Kafka - 快速指南
- Apache Kafka - 有用資源
- Apache Kafka - 討論
Apache Kafka 工作流程
目前,我們已經討論了 Kafka 的核心概念。現在讓我們來了解一下 Kafka 的工作流程。
Kafka 簡單來說就是一系列主題,這些主題被分成一個或多個分割槽。Kafka 分割槽是一個線性排序的訊息序列,其中每條訊息都由其索引(稱為偏移量)標識。Kafka 叢集中的所有資料都是分割槽的互斥並集。傳入的訊息寫入分割槽的末尾,訊息由消費者順序讀取。透過將訊息複製到不同的代理來提供永續性。
Kafka 以快速、可靠、持久、容錯和零停機的方式提供釋出-訂閱和基於佇列的訊息系統。在這兩種情況下,生產者只需將訊息傳送到主題,消費者就可以根據需要選擇任何一種訊息系統。讓我們按照下一節中的步驟來了解消費者如何選擇他們所需的訊息系統。
釋出-訂閱訊息的工作流程
以下是釋出-訂閱訊息的步驟式工作流程:
生產者定期向主題傳送訊息。
Kafka 代理將所有訊息儲存在為該特定主題配置的分割槽中。它確保訊息在分割槽之間平均分配。如果生產者傳送兩條訊息,並且有兩個分割槽,Kafka 將一條訊息儲存在第一個分割槽中,另一條訊息儲存在第二個分割槽中。
消費者訂閱特定主題。
一旦消費者訂閱了主題,Kafka 將向消費者提供該主題的當前偏移量,並將偏移量儲存在 ZooKeeper 叢集中。
消費者將定期(例如 100 毫秒)向 Kafka 請求新訊息。
一旦 Kafka 從生產者接收訊息,它就會將這些訊息轉發給消費者。
消費者將接收訊息並處理它。
訊息處理完畢後,消費者將向 Kafka 代理傳送確認。
Kafka 接收到確認後,它會將偏移量更改為新值並在 ZooKeeper 中更新它。由於偏移量儲存在 ZooKeeper 中,即使伺服器發生故障,消費者也可以正確讀取下一條訊息。
上述流程將重複,直到消費者停止請求。
消費者可以選擇隨時回退/跳到主題的所需偏移量並讀取所有後續訊息。
佇列訊息/消費者組的工作流程
在佇列訊息系統中,不是單個消費者,而是具有相同“組 ID”的一組消費者將訂閱主題。簡單來說,使用相同“組 ID”訂閱主題的消費者被視為單個組,訊息在它們之間共享。讓我們檢查一下這個系統的實際工作流程。
生產者定期向主題傳送訊息。
Kafka 將所有訊息儲存在為該特定主題配置的分割槽中,類似於之前的場景。
單個消費者訂閱特定主題,假設為“Topic-01”,其“組 ID”為“Group-1”。
直到新的消費者使用相同的“組 ID” “Group-1”訂閱相同的主題“Topic-01”,Kafka 的互動方式與釋出-訂閱訊息相同。
一旦新的消費者加入,Kafka 將切換到共享模式並在兩個消費者之間共享資料。這種共享將持續到消費者的數量達到為該特定主題配置的分割槽數量。
一旦消費者的數量超過分割槽的數量,新的消費者將不會收到任何進一步的訊息,直到任何一個現有消費者取消訂閱。出現這種情況是因為 Kafka 中的每個消費者將至少分配一個分割槽,一旦所有分割槽都分配給現有消費者,新的消費者就必須等待。
此功能也稱為“消費者組”。同樣,Kafka 將以非常簡單有效的方式提供這兩個系統的最佳功能。
ZooKeeper 的作用
Apache Kafka 的一個關鍵依賴項是 Apache ZooKeeper,它是一個分散式配置和同步服務。ZooKeeper 充當 Kafka 代理和消費者之間的協調介面。Kafka 伺服器透過 ZooKeeper 叢集共享資訊。Kafka 在 ZooKeeper 中儲存基本元資料,例如有關主題、代理、消費者偏移量(佇列讀取器)等資訊。
由於所有關鍵資訊都儲存在 ZooKeeper 中,並且它通常在其叢集中複製此資料,因此 Kafka 代理/ZooKeeper 的故障不會影響 Kafka 叢集的狀態。Kafka 將在 ZooKeeper 重新啟動後恢復狀態。這為 Kafka 提供了零停機時間。Kafka 代理之間的領導者選舉也是在領導者故障時使用 ZooKeeper 完成的。
要了解更多關於 ZooKeeper 的資訊,請參考 zookeeper
讓我們在下一章繼續學習如何在你的機器上安裝 Java、ZooKeeper 和 Kafka。