我是卡夫卡的新手,我将非常感谢对下一个案例的澄清。
卡夫卡文件在“消费者立场”一段中说:
“我们的主题被划分为一组完全有序的分区,每个分区在任何给定的时间都由一个使用者使用。”
基于上面的声明,如果很少的使用者组订阅了某个主题,并且生产者会将消息发布到这个主题中的特定分区,那么只有一个使用者可以提取消息。
问题是,如果只有一个消费者能够传达特定的信息,那么如何向许多消费者群体广播呢?
发布于 2014-05-02 07:36:59
只有consumer group中的一个使用者可以提取消息。但是all consumer groups收到了消息。
因此,如果您希望所有的消费者都能得到消息,那么就给他们分配不同的consumer groups。每条消息都传递给每个消费者组,但是在一个组中,它只发送给一个消费者。
阅读Consumer节here。
发布于 2014-12-15 17:08:16
如果一个主题有10个分区,并且3个使用者实例(C1、C2、C3按该顺序启动)都属于同一个消费者组,那么我们可以有不同的消费模型,它们允许如下所示的并行性
在这个模型中,当启动时,主题的所有10个分区都映射到相同的流,而C1则从该流开始消费。当C2启动时,Kafka会重新平衡两个流之间的分区。因此,每个流将被分配到5个分区(取决于重平衡算法,也可能是4vs6),每个使用者从其流中消费。类似地,当C3启动时,分区再次在3个流之间进行重新平衡。注意,在这个模型中,当使用分配给多个分区的流时,消息的顺序将在分区之间混乱。
每个使用者使用多个流(例如C1使用3,C2使用3,C3使用4)。在这个模型中,当C1启动时,所有10个分区都分配给3个流,C1可以同时使用多个线程从3个流中使用。当C2启动时,分区在6个流之间被重新平衡,同样地,当C3启动时,分区在10个流之间被重新平衡。每个使用者可以从多个流中并发消费。注意,这里的流和分区的数量是相等的。如果流的数量超过分区,一些流将不会收到任何消息,因为它们不会被分配给任何分区。
如果有另一个消费者组,则对该消费者组内的消费者应用相同的过程。
发布于 2018-09-11 14:33:31
通常有两种消息传递模式:
卡夫卡通过消费群体的概念同时支持这两者。同一组中的消费者遵循共享队列模式。只有一组中的一个消费者才能收到消息。
不同的消费群体遵循发布-订阅模式。对于每一条消息,订阅该主题的所有使用者组都将获得该邮件的副本。
有用的参考资料:https://dzone.com/articles/dont-use-apache-kafka-consumer-groups-the-wrong-wa
https://stackoverflow.com/questions/23136500
复制相似问题