Topic 每條發佈到 Kafka 集羣的消息都有一個類別,這個類別被稱爲 Topic。(物理上不一樣 Topic 的消息分開存儲,邏輯上一個 Topic 的消息雖然保存於一個或多個 broker 上但用戶只需指定消息的 Topic 便可生產或消費數據而沒必要關心數據存於何處)緩存
對應用來講,生產者要發佈消息,必須指定一個主題topic。以肯定發到哪裏了。 服務器
Consumer Group 消費組,每一個Consumer 屬於一個特定的 Consumer Group(可爲每一個 Consumer 指定 group name,若不指定 group name 則屬於默認的 group)。併發
這個概念是和Topic對應的。設計
一個topic能夠有多個消費組進行消費。3d
通常一個服務建立一個消費組。blog
以下圖隊列
上面兩個的使用能夠用下圖來表示:內存
Producer 負責發佈消息到 Kafka brokerkafka
從應用上來講,就是寫代碼的時候用工廠模式簡歷生產者,基本上保證一個服務就是一個生產者往隊列裏發送數據。消息隊列
通常來講,一臺服務器會起一個生產者。可是也不必定,某個大神寫個死循環創建一堆生產者直到內存溢出也是能夠實現的。
Consumer 消息消費者,向 Kafka broker 讀取消息的客戶端。
和生產者相對應,一臺服務器會起一個消費者。同理,寫個死循環創建一堆消費者直到內存溢出也是能夠實現的。
Partition 物理上的概念,每一個 Topic 包含一個或多個 Partition。這種服務就是這麼設計,數據太大了,就分紅小片。全部的小片合起來完成一個功能,這裏完成一個topic。
Broker 集羣包含一個或多個服務器,這種服務器被稱爲 broker。
對應用來講,生產者把消費發出去了,就無論了。消費者慢條斯理的按照本身的速率來消費。這段時間可能有大量消息產生,消費者壓力仍是在必定範圍內。作生產者和消費者之間解耦的就是一個緩存服務broker。
以上用一張圖表示以下:
用於解耦生產端和消費端。好比兩個團隊須要共享相同的數據,可是數據只能由一方來存儲。另外一方須要的數據能夠經過做爲消息的一個消費者進行消息消費。
用於增長併發度。一個http調用內部邏輯複雜。能夠將這個調用分爲兩階段處理。第一階段校驗調用的合法性。將校驗結果和查詢號返回客戶端。這個階段處理簡單,能夠支撐很高的併發度。若是校驗合法發送消息進行執行階段處理。由於MQ消息消費速率相對恆定,不會壓垮服務。客戶端能夠經過單號查詢結果。
消息隊列裏的消息若是設定延時消費,則這條消息就會阻塞後面正常的消息直到這條消息被消費。解決辦法是使用另外的隊列來存放這些會阻塞的消息。這就是死信隊列。