消費者 (Consumer )
消費者 訂閱 Kafka 中的主題 (Topic) ,并 拉取消息。
消費者群組( Consumer Group)
每一個消費者都有一個對應的 消費者群組。
一個群組里的消費者訂閱的是同一個主題,每個消費者接收主題的一部分分區的消息。
每一個分區 (Partition),只能被一個消費組中的一個消費者消費。
伸縮性
往群組里增加消費者是橫向伸縮消費能力的主要方式。
注意:不要讓消費者的數量超過主題分區的數量,多余的消費者只會閑置。
消費者與分區
假設主題T1有4個分區,我們創建了消費者C1,它是群組G1里唯一的消費者,我們用它訂閱主題T1。消費者C1將收到主題T1全部4個分區的消息,如圖4-1所示。
如果往群組G1新增多幾個消費者,直到有4個消費者,那么每個消費者可以分配到一個分區,如圖4-3所示。
如果我們往群組里添加更多的消費者,超過主題的分區數量,那么有一部分消費者就會被閑置,不會接收到任何消息,如圖4-4所示。
可以為每一個需要獲取一個或多個主題全部消息的應用程序創建一個消費者群組,然后往群組里添加消費者來伸縮讀取能力和處理能力,群組里的每個消費者只處理一部分消息。
消費者群組與分區再均衡
分區的所有權從一個消費者轉移到另一個消費者,這樣的行為被稱為再均衡.
再均衡為消費者群組帶來了高可用性和伸縮性.
在再均衡期間,消費者無法讀取消息,造成整個群組一小段時間的不可用。
何時會觸發再均衡
- 有新的消費者加入消費組
- 有消費者宕機下線
- 有消費者主動退出消費組
- 消費組對應的 組協調器(GroupCoorinator)節點發生變更。
- 消費組內所訂閱的任一主題或者主題的分區數量發生變化。
組協調器(GroupCoorinator)
GroupCoorinator 是 kafka 服務端中用于管理消費組的組件。
消費者協調器 (ConsumerCoordinator)
負責與 組協調器 進行交互。
組協調器 和 消費者協調器 的職責就是負責執行消費者再均衡的操作。
參考資料:
《深入理解kafka:核心設計與實踐原理》
《Kafka權威指南》