Apache Kafka -2 工作流程
阿新 • • 發佈:2019-02-13
Apache Kafka教程 之 Apache Kafka -工作流程
Apache Kafka - 工作流程
kafka只是一個分為一個或多個分割槽的主題集合。kafka分割槽是線性有序的訊息序列,其中每個訊息由其索引(稱為偏移量)標識。Kafka群集中的所有資料都是分割槽的不連貫的並集。傳入的訊息被寫在分割槽的末尾,訊息被消費者依次讀取。通過將訊息複製到不同的經紀人來提供耐久性。
Kafka以快速,可靠,持久,容錯和零停機的方式提供基於pub-sub
和佇列的訊息傳遞系統。在這兩種情況下,生產者只需將訊息傳送到主題,消費者可以根據需要選擇任何一種訊息系統。讓我們按照下一節中的步驟來了解消費者如何選擇他們選擇的訊息系統。
Pub-Sub訊息傳遞工作流程
以下是Pub-Sub Messaging的逐步工作流程 -
- 生產者定期向主題傳送訊息。
- Kafka代理將所有郵件儲存在為該特定主題配置的分割槽中。它確保訊息在分割槽之間平等共享。如果生產者傳送兩個訊息,並且有兩個分割槽,則Kafka將在第一個分割槽中儲存一個訊息,在第二個分割槽中儲存第二個訊息。
- 消費者訂閱一個特定的主題。
- 一旦消費者訂閱了一個話題,Kafka將向消費者提供該主題的當前偏移量,並將偏移量儲存在Zookeeper系列中。
- 消費者將定期請求Kafka(如100 Ms)新訊息。
- 一旦Kafka收到來自生產者的訊息,它會將這些訊息轉發給消費者。
- 消費者將收到訊息並處理它。
- 一旦訊息被處理,消費者將向Kafka經紀人傳送確認。
- 一旦Kafka收到確認,它會將偏移量更改為新值,並在Zookeeper中進行更新。由於Zookeeper中保留了偏移量,因此即使在伺服器出現故障時,消費者也可以正確讀取下一條訊息。
- 上述流程將重複,直到消費者停止請求。
- 消費者可以隨時快退/跳到主題的偏移量,並閱讀所有後續訊息。
佇列訊息/消費群組工作流程
在佇列訊息傳遞系統中,而不是單個消費者,具有相同組ID的消費者組將訂閱主題。簡單來說,訂閱具有相同組ID的主題的消費者被認為是單個組,並且訊息在它們之間共享。我們來看一下這個系統的實際工作流程。
- 生產者定期向主題傳送訊息。
- Kafka將所有郵件儲存在為該特定主題配置的分割槽中,與之前的方案類似。
- 單個消費者訂閱一個特定的主題,假設Topic-01與Group ID為Group-1。
- kafka用相同的方式,釋出-訂閱訊息的消費者互動,直到新的消費訂閱同一主題,主題-01與同組ID為第1組。
- 一旦新消費者到達,kafka將其業務轉為共享模式,並在兩個消費者之間共享資料。這種共享將繼續進行,直到協調者的數量達到為該特定主題配置的分割槽數。
- 一旦消費者數量超過了分割槽數量,新的消費者將不會再收到任何訊息,直到任何一個現有的消費者取消訂閱。出現這種情況是因為kafka的每個消費者將被分配至少一個分割槽,一旦所有分割槽分配給現有的消費者,新消費者將不得不等待。
- 此功能也稱為消費者組。以同樣的方式,kafka將以非常簡單和有效的方式提供兩種系統中最好的。
ZooKeeper的作用
Apache Kafka的關鍵依賴是Apache Zookeeper
,它是一種分散式配置和同步服務。Zookeeper作為kafka經紀人和消費者之間的協調介面。Kafka伺服器通過Zookeeper群集共享資訊。kafka在Zookeeper中儲存基本元資料,例如有關主題,經紀人,消費者偏移量(佇列讀者)等的資訊。
由於所有關鍵資訊都儲存在Zookeeper
中,並且通常會在其整體中複製此資料,所以Kafka代理/ Zookeeper的故障不會影響Kafka群集的狀態。一旦Zookeeper重啟,Kafka將恢復狀態。這給kafka零停機。kafka經紀人之間的領導選舉也是在領導失敗的情況下使用Zookeeper完成的。