kafka的術語(Terminology) Topic 和Consumer Group Topic 每條發佈到 Kafka 集群的消息都有一個類別,這個類別被稱為 Topic。(物理上不同 Topic 的消息分開存儲,邏輯上一個 Topic 的消息雖然保存於一個或多個 broker 上但用戶只需指定 ...
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。
以上用一張圖表示如下:
應用場景
基本應用
-
用於解耦生產端和消費端。比如兩個團隊需要共用相同的數據,但是數據只能由一方來存儲。另一方需要的數據可以通過作為消息的一個消費者進行消息消費。
-
用於增加併發度。一個http調用內部邏輯複雜。可以將這個調用分為兩階段處理。第一階段校驗調用的合法性。將校驗結果和查詢號返回客戶端。這個階段處理簡單,可以支撐很高的併發度。如果校驗合法發送消息進行執行階段處理。因為MQ消息消費速率相對恆定,不會壓垮服務。客戶端可以通過單號查詢結果。
高級應用
死信
消息隊列里的消息如果設定延時消費,則這條消息就會阻塞後面正常的消息直到這條消息被消費。解決辦法是使用另外的隊列來存放這些會阻塞的消息。這就是死信隊列。