Fork me on GitHub

應用角度看kafka的術語和功能

kafka的術語(Terminology)

Topic 和Consumer Group 

Topic 每條發布到 Kafka 集群的消息都有一個類別,這個類別被稱為 Topic。(物理上不同 Topic 的消息分開存儲,邏輯上一個 Topic 的消息雖然保存于一個或多個 broker 上但用戶只需指定消息的 Topic 即可生產或消費數據而不必關心數據存于何處)

對應用來說,生產者要發布消息,必須指定一個主題topic。以確定發到哪里了。 

Consumer Group  消費組,每個Consumer 屬于一個特定的 Consumer Group(可為每個 Consumer 指定 group name,若不指定 group name 則屬于默認的 group)。

這個概念是和Topic對應的。

一個topic可以有多個消費組進行消費。

一般一個服務創建一個消費組。

如下圖


上面兩個的使用可以用下圖來表示:

 

Producer和Consumer

Producer 負責發布消息到 Kafka broker

從應用上來說,就是寫代碼的時候用工廠模式簡歷生產者,基本上保證一個服務就是一個生產者往隊列里發送數據。

一般來說,一臺服務器會起一個生產者。但是也不一定,某個大神寫個死循環建立一堆生產者直到內存溢出也是可以實現的。

Consumer 消息消費者,向 Kafka broker 讀取消息的客戶端。

和生產者相對應,一臺服務器會起一個消費者。同理,寫個死循環建立一堆消費者直到內存溢出也是可以實現的。

 

Partition和Broker

Partition 物理上的概念,每個 Topic 包含一個或多個 Partition。這種服務就是這么設計,數據太大了,就分成小片。所有的小片合起來完成一個功能,這里完成一個topic。

Broker  集群包含一個或多個服務器,這種服務器被稱為 broker。

對應用來說,生產者把消費發出去了,就不管了。消費者慢條斯理的按照自己的速率來消費。這段時間可能有大量消息產生,消費者壓力還是在一定范圍內。做生產者和消費者之間解耦的就是一個緩存服務broker。

以上用一張圖表示如下:

應用場景

基本應用

  1. 用于解耦生產端和消費端。比如兩個團隊需要共享相同的數據,但是數據只能由一方來存儲。另一方需要的數據可以通過作為消息的一個消費者進行消息消費。

  2. 用于增加并發度。一個http調用內部邏輯復雜。可以將這個調用分為兩階段處理。第一階段校驗調用的合法性。將校驗結果和查詢號返回客戶端。這個階段處理簡單,可以支撐很高的并發度。如果校驗合法發送消息進行執行階段處理。因為MQ消息消費速率相對恒定,不會壓垮服務。客戶端可以通過單號查詢結果。

高級應用

死信

消息隊列里的消息如果設定延時消費,則這條消息就會阻塞后面正常的消息直到這條消息被消費。解決辦法是使用另外的隊列來存放這些會阻塞的消息。這就是死信隊列。

posted @ 2019-10-10 22:52  編程一生  閱讀(...)  評論(... 編輯 收藏
ag二分彩