1
我有两个消费群,即G1和G2。每组传递给一位消费者的消息?
- G1有两个成员M1,M2。
- G2再次有两个成员M3,M4
G1轮询卡夫卡的话题,将信息传送到只有一名成员无论是M1或M2这里不是两者兼而有之?
同样当G2轮询后的某个时候,它仍然会在主题上找到消息。这里也是枯萎的M3或M4会收到信息?
此外,我相信组中的所有成员应该在同一个节点上。对 ?客户代码或Kafka有责任选择组中的特定成员?
我有两个消费群,即G1和G2。每组传递给一位消费者的消息?
G1轮询卡夫卡的话题,将信息传送到只有一名成员无论是M1或M2这里不是两者兼而有之?
同样当G2轮询后的某个时候,它仍然会在主题上找到消息。这里也是枯萎的M3或M4会收到信息?
此外,我相信组中的所有成员应该在同一个节点上。对 ?客户代码或Kafka有责任选择组中的特定成员?
您的问题的答案取决于这些消费群体消费的主题中有多少个分区。只有一个消费者组的成员才能从主题的每个分区读取。
如果主题T1中只有一个分区,那么M1和M3会从中读取,M2和M4将不会获得任何消息。
如果在T1两个分隔(比如P1和P2),那么M1和M3将得到T1P1和M2和M4的消息将来自T1P2
一个消费者团体的所有成员获得的消息不必须位于同一节点上
其中一个代理被指定为组的协调员,负责管理组的成员以及他们的分区分配。
正如你所说'如果话题T1中只有一个分区,那么M1和M3会从中读取,M2和M4将不会收到任何消息。“我相信你的帖子的最后一个陈述是你说它的经纪人是负责任的选择M1而不是M2? – emilly
最简单的说法是,客户端和代理进行通信以确定组成员资格和分区分配。更复杂的答案是,组成员大多是在代理上完成的(请参阅https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol#AGuideToTheKafkaProtocol-GroupMembershipAPI)和分区任务主要在Kafka客户端库中完成(请参阅https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Client-side+Assignment+Proposal) –
如果您有兴趣了解更多信息Kafka 0.11.0.0增加现有的分区分配策略列表中新的粘滞分区分配算法。有一个非常详细的例子写在这里https://cwiki.apache.org/confluence/display/KAFKA/KIP-54+-+Sticky+Partition+Assignment+Strategy –