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訊息消費速率相對恒定,不會壓垮服務,客戶端可以通過單號查詢結果,
高級應用
死信
訊息佇列里的訊息如果設定延時消費,則這條訊息就會阻塞后面正常的訊息直到這條訊息被消費,解決辦法是使用另外的佇列來存放這些會阻塞的訊息,這就是死信佇列,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/46432.html
標籤:架構設計
下一篇:Ansible playbook
