Kafka分配分割槽過程
阿新 • • 發佈:2018-11-11
當消費者要加入群組時,它會向擔任群組協調器的broker傳送一個JoinGroup請求。第一個加入群組的消費者將成為“群主”。群主從協調器那裡獲得群組的成員列表(列表中包含了所有最近傳送過心跳的消費者,它們被認為是活躍的),並負責給每一個消費者分配分割槽。群主使用一個實現了PartitionAssignor介面的分類來決定哪些分割槽應該被分配給哪些消費者。
Kafka內建了兩種分配分割槽的策略:
Rang:把主題的若干個連續分割槽分配給消費者。當分割槽數量無法被消費者數量整除時,先加入群組的消費者會分配到更多的分割槽。
RoundRobin:把主題的所有分割槽逐個分配給消費者。RoundRobin策略會給所有消費者分配相同數量的分割槽(或者最大就差一個分割槽)。
可以通過partion.assignment.strategy來配置,預設使用實現了Range策略的org.apach.kafka.clients.consumer.RangeAssignor,也可以指定org.apach.kafka.clients.consumer.RoundRobinAssignor,還可以使用自定義策略。
分配完畢後,群主會把分配情況列表發給群主協調器,協調器在把這些資訊發給所有消費者。每個消費者只能看到自己的分配訊息,只有群主知道群組裡所有消費者的分配資訊。這個過程會在每次再均衡時重複發生。