1. 程式人生 > 實用技巧 >Kafka原理詳解

Kafka原理詳解

一、Kafka概述

Apache Kafka是一個開源訊息系統,由Scala寫成。是由Apache軟體基金會開發的一個開源訊息系統專案。
Kafka是一個分散式訊息佇列。Kafka對訊息儲存時根據Topic進行歸類,傳送訊息者稱為Producer,訊息接受者稱為Consumer,此外kafka叢集有多個kafka例項組成,每個例項(server)稱為broker。
無論是kafka叢集,還是consumer都依賴於zookeeper叢集儲存一些meta資訊,來保證系統可用性。能夠很好地進行離線和線上應用。

分散式訊息傳遞基於可靠的訊息佇列,在客戶端應用和訊息系統之間非同步傳遞訊息。有兩種主要的訊息傳遞模式:點對點傳遞模式、釋出-訂閱模式

。大部分的訊息系統選用釋出-訂閱模式。Kafka就是一種釋出-訂閱模式

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的訊息會被所有訂閱者消費。
當生產者釋出訊息,不管是否有消費者。都不會儲存訊息。

三、