消費者分組(Consumer Group)是 Kafka
提供的一種強大的消息消費機制,它允許多個消費者協同工作,共同消費一個或多個主題的消息,從而實現高吞吐量、可擴展性和容錯性。
基本概念
消費者分組
:一組消費者實例的集合,這些消費者實例共同訂閱一個或多個主題,并通過分組來協調消息的消費。每個消費者分組都有一個唯一的名稱,用于標識該分組。分區分配
:Kafka 會將主題的分區分配給消費者分組中的各個消費者實例,每個分區只能被一個消費者實例消費。這樣可以確保消息的順序性,并且避免多個消費者同時消費同一個分區的消息導致的重復消費問題。
工作原理
1. 消費者加入分組
當一個消費者啟動并指定了一個消費者分組時,它會向 Kafka 集群發送加入分組的請求。Kafka 會為該消費者分配一個唯一的成員 ID,并將其加入到指定的消費者分中。
2. 分區分配策略
Kafka 提供了多種分區分配策略,常見的有 RangeAssignor
、RoundRobinAssignor
和 StickyAssignor
等。分區分配策略的選擇會影響到分區在消費者之間的分配方式。
RangeAssignor
:按照主題進行分區分配,將一個主題的連續分區分配給同一個消費者。例如,對于一個有 6 個分區的主題和 2 個消費者的分組,RangeAssignor
可能會將分區 0 - 2 分配給消費者 1,將分區 3 - 5 分配給消費者 2。RoundRobinAssignor
:將所有主題的分區依次輪流分配給消費者。例如,對于兩個主題(每個主題有 3 個分區)和 2 個消費者的分組,RoundRobinAssignor
可能會將主題 1 的分區 0、主題 2 的分區 0 分配給消費者 1,將主題 1 的分區 1、主題 2 的分區 1 分配給消費者 2,以此類推。StickyAssignor
:在保證分區分配盡可能均勻的同時,盡量保持之前的分區分配結果,減少分區重新分配的次數,從而降低開銷。