原文地址: http://blogxinxiucan.sh1.newtouch.com/2017/07/12/Apache-Kafka-工作流程/

Apache Kafka教程 之 Apache Kafka -工作流程
Apache Kafka - 工作流程
kafka只是一個分為一個或多個分區(qū)的主題集合。kafka分區(qū)是線性有序的消息序列,其中每個消息由其索引(稱為偏移量)標(biāo)識。Kafka群集中的所有數(shù)據(jù)都是分區(qū)的不連貫的并集。傳入的消息被寫在分區(qū)的末尾,消息被消費(fèi)者依次讀取。通過將消息復(fù)制到不同的經(jīng)紀(jì)人來提供耐久性。
Kafka以快速,可靠,持久,容錯和零停機(jī)的方式提供基于pub-sub和隊(duì)列的消息傳遞系統(tǒng)。在這兩種情況下,生產(chǎn)者只需將消息發(fā)送到主題,消費(fèi)者可以根據(jù)需要選擇任何一種消息系統(tǒng)。讓我們按照下一節(jié)中的步驟來了解消費(fèi)者如何選擇他們選擇的消息系統(tǒng)。
Pub-Sub消息傳遞工作流程
以下是Pub-Sub Messaging的逐步工作流程 -
- 生產(chǎn)者定期向主題發(fā)送消息。
- Kafka代理將所有郵件存儲在為該特定主題配置的分區(qū)中。它確保消息在分區(qū)之間平等共享。如果生產(chǎn)者發(fā)送兩個消息,并且有兩個分區(qū),則Kafka將在第一個分區(qū)中存儲一個消息,在第二個分區(qū)中存儲第二個消息。
- 消費(fèi)者訂閱一個特定的主題。
- 一旦消費(fèi)者訂閱了一個話題,Kafka將向消費(fèi)者提供該主題的當(dāng)前偏移量,并將偏移量保存在Zookeeper系列中。
- 消費(fèi)者將定期請求Kafka(如100 Ms)新消息。
- 一旦Kafka收到來自生產(chǎn)者的消息,它會將這些消息轉(zhuǎn)發(fā)給消費(fèi)者。
- 消費(fèi)者將收到消息并處理它。
- 一旦消息被處理,消費(fèi)者將向Kafka經(jīng)紀(jì)人發(fā)送確認(rèn)。
- 一旦Kafka收到確認(rèn),它會將偏移量更改為新值,并在Zookeeper中進(jìn)行更新。由于Zookeeper中保留了偏移量,因此即使在服務(wù)器出現(xiàn)故障時,消費(fèi)者也可以正確讀取下一條消息。
- 上述流程將重復(fù),直到消費(fèi)者停止請求。
- 消費(fèi)者可以隨時快退/跳到主題的偏移量,并閱讀所有后續(xù)消息。
隊(duì)列消息/消費(fèi)群組工作流程
在隊(duì)列消息傳遞系統(tǒng)中,而不是單個消費(fèi)者,具有相同組ID的消費(fèi)者組將訂閱主題。簡單來說,訂閱具有相同組ID的主題的消費(fèi)者被認(rèn)為是單個組,并且消息在它們之間共享。我們來看一下這個系統(tǒng)的實(shí)際工作流程。
- 生產(chǎn)者定期向主題發(fā)送消息。
- Kafka將所有郵件存儲在為該特定主題配置的分區(qū)中,與之前的方案類似。
- 單個消費(fèi)者訂閱一個特定的主題,假設(shè)Topic-01與Group ID為Group-1。
- kafka用相同的方式,發(fā)布-訂閱消息的消費(fèi)者互動,直到新的消費(fèi)訂閱同一主題,主題-01與同組ID為第1組。
- 一旦新消費(fèi)者到達(dá),kafka將其業(yè)務(wù)轉(zhuǎn)為共享模式,并在兩個消費(fèi)者之間共享數(shù)據(jù)。這種共享將繼續(xù)進(jìn)行,直到協(xié)調(diào)者的數(shù)量達(dá)到為該特定主題配置的分區(qū)數(shù)。
- 一旦消費(fèi)者數(shù)量超過了分區(qū)數(shù)量,新的消費(fèi)者將不會再收到任何消息,直到任何一個現(xiàn)有的消費(fèi)者取消訂閱。出現(xiàn)這種情況是因?yàn)閗afka的每個消費(fèi)者將被分配至少一個分區(qū),一旦所有分區(qū)分配給現(xiàn)有的消費(fèi)者,新消費(fèi)者將不得不等待。
- 此功能也稱為消費(fèi)者組。以同樣的方式,kafka將以非常簡單和有效的方式提供兩種系統(tǒng)中最好的。
ZooKeeper的作用
Apache Kafka的關(guān)鍵依賴是Apache Zookeeper,它是一種分布式配置和同步服務(wù)。Zookeeper作為kafka經(jīng)紀(jì)人和消費(fèi)者之間的協(xié)調(diào)接口。Kafka服務(wù)器通過Zookeeper群集共享信息。kafka在Zookeeper中存儲基本元數(shù)據(jù),例如有關(guān)主題,經(jīng)紀(jì)人,消費(fèi)者偏移量(隊(duì)列讀者)等的信息。
由于所有關(guān)鍵信息都存儲在Zookeeper中,并且通常會在其整體中復(fù)制此數(shù)據(jù),所以Kafka代理/ Zookeeper的故障不會影響Kafka群集的狀態(tài)。一旦Zookeeper重啟,Kafka將恢復(fù)狀態(tài)。這給kafka零停機(jī)。kafka經(jīng)紀(jì)人之間的領(lǐng)導(dǎo)選舉也是在領(lǐng)導(dǎo)失敗的情況下使用Zookeeper完成的。