Kafka是如何向许多消费者群体广播的

r1zhe5dt  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(573)

我是新来Kafka,我将非常感谢澄清下一个案件。
Kafka文件在“消费者立场”一段中说:
“我们的主题被划分为一组完全有序的分区,每个分区在任何给定时间都由一个使用者使用。”
根据上面的语句,如果订阅某个主题的使用者组很少,并且生产者将消息发布到该主题中的特定分区,那么只有一个使用者可以拉取消息。
问题是,如果只有一个消费者可以提取特定的信息,那么如何向多个消费者群体进行广播呢?

h5qlskok

h5qlskok1#

如果一个主题有10个分区,3个使用者示例(c1、c2、c3按该顺序开始)都属于同一使用者组,那么我们可以有不同的使用者模型,允许如下所示的读取并行性
每个消费者使用一个流。在这个模型中,当c1启动时,主题的所有10个分区都Map到同一个流,并且c1从该流开始消费。当c2开始时,Kafka重新平衡两个流之间的分区。因此,每个流将被分配到5个分区(取决于重新平衡算法,它也可能是4对6),每个消费者从其流中消费。类似地,当c3启动时,分区在3个流之间再次重新平衡。注意,在这个模型中,当从分配给多个分区的流中消费消息时,消息的顺序将在分区之间混淆。
每个使用者使用多个流(假设c1使用3,c2使用3,c3使用4)。在这个模型中,当c1启动时,所有的10个分区都被分配给3个流,并且c1可以使用多个线程同时使用3个流中的数据。当c2启动时,分区在6个流之间重新平衡,类似地,当c3启动时,分区在10个流之间重新平衡。每个消费者可以同时消费多个流。注意,这里的流和分区的数量是相等的。如果流的数量超过了分区,一些流将不会得到任何消息,因为它们不会被分配任何分区。
如果存在另一个消费者组,则对该消费者组中的消费者应用相同的过程

yfwxisqw

yfwxisqw2#

问得好。

举个例子,我有一个主题,叫做complaint,有两个分区p1,p2
现在我有两个消费群,叫做group1,有两个消费群c1和c2,group2,有两个消费群c3
在这里,我将消息从p1路由到c1,p2路由到c2,我订阅了另一个名为c3的消费者,但它在不同的组中,所以在这里,整个消息的副本也被发送到该消费者

xqk2d5yq

xqk2d5yq3#

一次中只有一个消费者 consumer group 我可以拉信息。但所有 consumer groups 获取消息。
因此,如果您希望所有消费者都能获得这些消息,请为它们分配不同的值 consumer groups . 每条消息都发送给每个消费者组,但在一个组中,它只发送给一个消费者。
阅读 Consumer 在这里。

2vuwiymt

2vuwiymt4#

通常有两种消息传递模式:
共享队列:所有使用者都订阅一个消息队列。每个消费者相互竞争,对于每条消息,只有一个消费者会得到它。
发布-订阅:每条消息都会广播给订阅的所有消费者。所以所有的消费者都会得到相同的信息。
Kafka通过消费群体的概念同时支持了两者。同一组中的消费者遵循共享队列模式。一个组中只有一个消费者可以获得消息。
不同的消费者群体遵循发布-订阅模式。对于每条消息,订阅该主题的所有消费者组都将获得消息的副本。
有用的参考:https://dzone.com/articles/dont-use-apache-kafka-consumer-groups-the-wrong-wa

相关问题