首页 文章

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

提问于
浏览
5

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

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

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

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

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

4 回答

  • 22

    好问题 .
    enter image description here

    举一个例子我有一个名为 complaint 的主题有两个分区 p1,p2

    现在我有两个名为 group1 的消费者群体有两个消费者 c1c2 以及 group2 消费 c3

    这里我从 p1 路由消息应该转到 c1p2 应该转到 c2 并且我订阅了另一个名为 c3 的消费者,但这是在不同的组中,所以这里的整个消息的副本也发送给该消费者

  • 0

    如果一个主题有10个分区,并且3个消费者实例(C1,C2,C3按此顺序启动)都属于同一个消费者组,我们可以使用不同的消费模型,允许读取并行度,如下所示

    Each consumer uses a single stream. 在此模型中,当C1启动时,主题的所有10个分区都映射到同一个流,并且C1开始从该流中消耗 . 当C2启动时,Kafka重新 balancer 两个流之间的分区 . 因此,每个流将被分配到5个分区(取决于重新 balancer 算法,它可能也是4对6)并且每个消费者从其流消耗 . 类似地,当C3启动时,分区再次在3个流之间重新 balancer . 请注意,在此模型中,当从分配给多个分区的流中进行消费时,消息的顺序将在分区之间混乱 .

    Each consumer uses more than one stream (say C1 uses 3, C2 uses 3 and C3 uses 4). 在此模型中,当C1启动时,所有10个分区都分配给3个流,C1可以使用多个线程同时使用3个流 . 当C2启动时,分区在6个流之间重新 balancer ,类似地,当C3启动时,分区在10个流之间重新 balancer . 每个消费者可以同时从多个流中消费 . 请注意,此处的流和分区数相等 . 如果流的数量超过分区,则某些流将不会获得任何消息,因为它们不会被分配任何分区 .

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

  • 2

    通常有两种消息传递模式:

    • 共享队列:所有使用者订阅一个消息队列 . 每个消费者彼此竞争,对于每个消息,只有一个消费者会得到它 .

    • 发布 - 订阅:每条消息都会向所有订阅的消费者广播 . 所以所有消费者都会得到同样的信息 .

    Kafka 通过消费者群体的概念同时支持他们 . 同一组中的使用者遵循共享队列模式 . 组中只有一个消费者可以获得该消息 .

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

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

  • 18

    consumer group 中只有一个消费者可以提取消息 . 但 all consumer groups 获取消息 .

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

    阅读 Consumer 部分here .

相关问题