我看到对 Kafka 消费者组协调员和消费者组领导者的引用...
有什么区别?
将集团管理分为两套不同的职责有什么好处?
消费者组协调员是经纪人之一,而组领导者是消费者组中的消费者之一。
组协调器只不过是从消费者组的所有消费者接收心跳(或轮询消息)的代理之一。每个消费者组都有一个组协调员。如果消费者停止发送心跳,协调器将触发重新平衡。
它为您提供更灵活/可扩展的分配策略,而无需重新启动代理。
这种分离的关键在于组长负责计算整个组的作业。
partition.assignment.strategy
消费者配置参数)。
如果分区分配由消费者组协调员处理,则在不重新启动代理的情况下无法配置自定义分配策略。
更多详情请参阅Kafka客户端分配提案。
来自“卡夫卡权威指南”[Narkhede、Shapira & Palino,2017]:
当消费者想要加入某个消费者组时,它会发送一个
向小组协调员提出请求。第一个加入群组的消费者 成为小组领导者。领导收到一份全部名单 来自组协调员的组中的消费者(这将包括 所有最近发送心跳的消费者因此 被认为是活着的)并且它负责分配一个子集 分区给每个消费者。它使用了一个实现JoinGroup
界面来决定应该进行哪些分区 由哪个消费者处理。PartitionAssignor
[...] 决定分区分配后,消费者领导者发送 发送此信息的
的分配列表 向所有消费者提供信息。每个消费者只看到自己的 分配 - 领导者是唯一拥有完整权限的客户端进程 组中的消费者列表及其分配。这个过程 每次重新平衡发生时都会重复。GroupCoordinator
添加已经给出的答案。 GroupCoordinator 从消费者组领导者接收分区分配,所有消费者从 GroupCoordinator 接收分区分配。
因此 GroupCoordinator 要求 GroupLeader 根据 https://kafka.apache.org/documentation/#consumerconfigs_partition.assignment.strategy 决定分区分配,并收到相同的信息,Coordinator 随后将信息传递给另一个群体内的消费者(不包括领导者)。
每个消费者只知道自己的分区分配。尽管组长知道分配给组中不同消费者的所有分区。