Kafka原理詳解
阿新 • • 發佈:2020-11-30
一、Kafka概述
Apache Kafka是一個開源訊息系統,由Scala寫成。是由Apache軟體基金會開發的一個開源訊息系統專案。
Kafka是一個分散式訊息佇列。Kafka對訊息儲存時根據Topic進行歸類,傳送訊息者稱為Producer,訊息接受者稱為Consumer,此外kafka叢集有多個kafka例項組成,每個例項(server)稱為broker。
無論是kafka叢集,還是consumer都依賴於zookeeper叢集儲存一些meta資訊,來保證系統可用性。能夠很好地進行離線和線上應用。
分散式訊息傳遞基於可靠的訊息佇列,在客戶端應用和訊息系統之間非同步傳遞訊息。有兩種主要的訊息傳遞模式:點對點傳遞模式、釋出-訂閱模式
1.1點對點訊息傳遞模式
在點對點訊息系統中,訊息持久化到一個佇列中。此時,將有一個或多個消費者消費佇列中的資料。但是一條訊息只能被消費一次。當一個消費者消費了佇列中的某條資料之後,該條資料則從訊息佇列中刪除。該模式即使有多個消費者同時消費資料,也能保證資料處理的順序。
Peer-to-Peer模式工作原理:
1.訊息生產者Producer1生產訊息到Queue,然後Consumer1從Queue中取出並且消費訊息。 2.訊息被消費後,Queue將不再儲存訊息,其它所有Consumer不可能消費到已經被其它Consumer消費過的訊息。3.Queue支援存在多個Producer,但是對一條訊息而言,只會有一個Consumer可以消費,其它Consumer則不能再次消費。 4.但Consumer不存在時,訊息則由Queue一直儲存,直到有Consumer把它消費。
1.2釋出-訂閱訊息傳遞模式
在釋出-訂閱訊息系統中,訊息被持久化到一個topic中。與點對點訊息系統不同的是,消費者可以訂閱一個或多個topic,消費者可以消費該topic中所有的資料,同一條資料可以被多個消費者消費,資料被消費後不會立馬刪除。在釋出-訂閱訊息系統中,訊息的生產者稱為釋出者,消費者稱為訂閱者。
Publish/Subscribe模式工作原理:
1.訊息釋出者Publisher將訊息釋出到主題Topic中,同時有多個訊息消費者 Subscriber消費該訊息。2.和PTP方式不同,釋出到Topic的訊息會被所有訂閱者消費。 3.當釋出者釋出訊息,不管是否有訂閱者,都不會報錯資訊。 4.一定要先有訊息釋出者,後有訊息訂閱者。
二、queue與topic的區別
JMS中定義了兩種訊息模型:點對點(point to point, queue)和釋出/訂閱(publish/subscribe,topic)。主要區別就是是否能重複消費。2.1 點對點:Queue,不可重複消費
訊息生產者生產訊息傳送到queue中,然後訊息消費者從queue中取出並且消費訊息。 訊息被消費以後,queue中不再有儲存,所以訊息消費者不可能消費到已經被消費的訊息。
Queue支援存在多個消費者,但是對一個訊息而言,只會有一個消費者可以消費、其它的則不能消費此訊息了。
當消費者不存在時,訊息會一直儲存,直到有消費消費。
2.2 釋出/訂閱:Topic,可以重複消費
訊息生產者(釋出)將訊息釋出到topic中,同時有多個訊息消費者(訂閱)消費該訊息。
和點對點方式不同,釋出到topic的訊息會被所有訂閱者消費。
當生產者釋出訊息,不管是否有消費者。都不會儲存訊息。
三、