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

iva*_*n_d 9 apache-kafka

我是卡夫卡的新手,我将非常感谢下一个案例的澄清.

Kafka文档在"消费者职位"一节中说:

"我们的主题分为一组完全有序的分区,每个分区在任何给定时间由一个消费者使用."

根据上述声明,如果少数消费者组订阅了一个主题,并且生产者将在此主题中将消息发布到特定分区,则只有一个消费者可以提取该消息.

问题是,如果只有一个消费者能够提取特定信息,那么许多消费者群体的广播可能会如何?

jav*_*eek 23

如果一个主题有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个流之间重新平衡.每个消费者可以同时从多个流中消费.请注意,此处的流和分区数相等.如果流的数量超过分区,则某些流将不会获得任何消息,因为它们不会被分配任何分区.

如果存在另一个使用者组,则将相同的过程应用于该使用者组中的使用者

  • 我不知道为什么这个答案没有被接受.这描述了理解Kafka中分区/消费者关系的一个非常重要的方面. (2认同)
  • 版主实际上删除了我的答案,因为我发布了一个链接到我的文章,更详细地描述了这一点。很遗憾,但这就是 StackOverflow 的工作原理。 (2认同)

gag*_*nbm 20

只有一个消费者consumer group可以提取消息.但所有人都 consumer groups得到了消息.

因此,如果您希望所有消费者都能获得消息,请将它们分配不同consumer groups.每条消息都发送给每个消费者组,但在一个组内,它只发送给一个消费者.

阅读此处Consumer部分.

  • 您的陈述"只有一个消费者群体中的一个消费者可以提取消息"并不完全正确.每个分区只能由一个消费者使用.因此,如果消费者组中有多个消费者,他们仍然可以使用不同的分区.这就是卡夫卡并行消费的重点 (2认同)

小智 8

通常有两种消息模式:

  1. 共享队列:所有消费者订阅一个消息队列。每个消费者相互竞争,对于每条消息,只有一个消费者会得到它。
  2. 发布订阅:每条消息都广播给所有订阅的消费者。所以所有消费者都会得到相同的消息。

Kafka通过消费者组的概念同时支持两者。同一组中的消费者遵循共享队列模式。一组中只有一个消费者可以获得消息。

不同的消费者群体遵循发布订阅模式。对于每条消息,订阅该主题的所有消费者组都将获得该消息的副本。

一个有用的参考:https : //dzone.com/articles/dont-use-apache-kafka-consumer-groups-the-wrong-wa