【发布时间】:2017-06-20 06:55:14
【问题描述】:
我看到对 Kafka Consumer Group Coordinators 和 Consumer Group Leaders 的引用......
有什么区别?
将集团管理分成两组不同的职责有什么好处?
【问题讨论】:
标签: apache-kafka kafka-consumer-api
我看到对 Kafka Consumer Group Coordinators 和 Consumer Group Leaders 的引用......
有什么区别?
将集团管理分成两组不同的职责有什么好处?
【问题讨论】:
标签: apache-kafka kafka-consumer-api
消费者组协调员是代理之一,而组长是消费者组中的消费者之一。
组协调器只不过是接收来自消费者组的所有消费者的心跳(或轮询消息)的代理之一。每个消费者组都有一个组协调员。如果消费者停止发送心跳,协调器将触发重新平衡。
它为您提供更灵活/可扩展的分配策略,而无需重新启动代理。
这种分离的关键在于组长负责计算整个组的分配。
表示这个分配策略可以在一个consumer上配置(见partition.assignment.strategyconsumer配置参数)。
如果分区分配由消费者组协调员处理,则在不重新启动代理的情况下无法配置自定义分配策略。
更多详情请见Kafka Client-side Assignment Proposal。
来自“Kafka The Definitive Guide”[Narkhede, Shapira & Palino, 2017]:
当一个消费者想要加入一个消费者组时,它会发送一个
JoinGroup向小组协调员提出要求。第一个加入群组的消费者 成为小组领导。领导者收到所有的列表 来自组协调员的组中的消费者(这将包括 所有最近发送过心跳的消费者,因此 被认为是活着的),它负责分配一个子集 每个消费者的分区。它使用了一个实现PartitionAssignor接口决定哪些分区应该是 由哪个消费者处理。[...] 决定分区分配后,消费者领导者发送 发送给
GroupCoordinator的分配列表 向所有消费者提供信息。每个消费者只看到自己的 分配 - 领导者是唯一拥有完整的客户进程 组中的消费者列表及其分配。这个流程 每次重新平衡发生时都会重复。
【讨论】: