我是卡夫卡的新手,我将非常感谢下一个案例的澄清.
Kafka文档在"消费者职位"一节中说:
"我们的主题分为一组完全有序的分区,每个分区在任何给定时间由一个消费者使用."
根据上述声明,如果少数消费者组订阅了一个主题,并且生产者将在此主题中将消息发布到特定分区,则只有一个消费者可以提取该消息.
问题是,如果只有一个消费者能够提取特定信息,那么许多消费者群体的广播可能会如何?
如果一个主题有10个分区,并且3个消费者实例(C1,C2,C3按顺序启动)都属于同一个消费者组,我们可以使用不同的消费模型,允许读取并行度,如下所示
每个消费者使用单个流. 在此模型中,当C1启动时,主题的所有10个分区都映射到同一个流,并且C1开始从该流中消耗.当C2启动时,Kafka重新平衡两个流之间的分区.因此,每个流将分配到5个分区(取决于重新平衡算法,它可能也是4对6)并且每个消费者从其流消耗.类似地,当C3启动时,分区再次在3个流之间重新平衡.请注意,在此模型中,当从分配给多个分区的流中进行消费时,消息的顺序将在分区之间混乱.
每个消费者使用多个流(比如C1使用3,C2使用3,C3使用4). 在此模型中,当C1启动时,所有10个分区都分配给3个流,C1可以使用多个线程同时从3个流中消耗.当C2启动时,分区在6个流之间重新平衡,类似地,当C3启动时,分区在10个流之间重新平衡.每个消费者可以同时从多个流中消费.请注意,此处的流和分区数相等.如果流的数量超过分区,则某些流将不会获得任何消息,因为它们不会被分配任何分区.
如果存在另一个使用者组,则将相同的过程应用于该使用者组中的使用者
只有一个消费者consumer group
可以提取消息.但所有人都 consumer groups
得到了消息.
因此,如果您希望所有消费者都能获得消息,请将它们分配不同consumer groups
.每条消息都发送给每个消费者组,但在一个组内,它只发送给一个消费者.
阅读此处的Consumer
部分.