【问题标题】:How does Kafka help to realize the abstraction of queuing as well as publish-subscribe?Kafka如何帮助实现队列和发布订阅的抽象?
【发布时间】:2016-02-03 12:09:57
【问题描述】:

Kafka 文档指出:

消费者使用消费者组名称标记自己,发布到主题的每条消息都会传递到每个订阅消费者组中的一个消费者实例。消费者实例可以位于不同的进程或不同的机器上。

如果所有消费者实例都有相同的消费者组,那么这就像传统的队列平衡消费者负载一样。

如果所有消费者实例都有不同的消费者组,那么这就像发布-订阅一样,所有消息都广播给所有消费者。

我对此有几个疑问:
1) 为什么发布的消息会转到到消费者组的单个消费者实例?从分区读取数据不是消费者的责任吗? go 在这里是什么意思?
2)对特定主题感兴趣的消费者应该从他们感兴趣的分区中读取。消费者群体的相关性是什么?
3)这对实现队列和发布者-订阅者的抽象有何帮助?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    在 Kafka 中,一个主题可以有多个分区,如果一个消费者组有 X 个消费者,则该主题的分区将在消费者之间拆分。 (即:如果您有 1 个带有 2 个分区的主题,并且您有一个带有 2 个消费者的消费者组,则每个消费者将从 1 个分区消费,在相同的情况下,如果消费者组只有 1 个消费者,则该消费者将从 2 个分区读取) 消费者组基本上协调(是协调者)具有主题和分区的不同消费者。如果您在同一个 CG 中有 4 个消费者和 1 个崩溃,则消费者组会将崩溃消费者的分区提供给同一 CG 中可用的其他消费者,以便处理这些分区中的信息(如果 CG 没有重新分配不同的如果消费者崩溃,某些分区将永远不会被读取)。

    如果消费者在同一个 CG 中,那么发送到主题的信息将在他们之间分发。如果每个消费者都有不同的CG,那么他们都会得到所有的消息。

    希望现在更清楚,Kafka 文档需要改进。

    【讨论】:

    • 但我仍然不明白这对队列和发布者-订阅者的抽象有何帮助。 ://
    • 消息只发布到消费者组中的一个消费者实例这一事实有什么相关性?
    • 如果您的负载很大,您可以让多个消费者并行消费和处理这些信息,在这种情况下,只有一个消费者处理一条消息,这是很有价值的(您不希望所有消费者都处理相同的消息,这不是您拆分工作的方式)。在发布者 - 订阅者模式中,当消息发布时,您希望所有订阅者都知道此消息,在 kafka 中,您通过创建只有 1 个消费者的消费者组来做到这一点。
    • 消息的消费处理有什么区别?
    • 消费消息意味着从kafka获取消息,处理就是你对该消息所做的事情。因此,如果您想要升级处理,您可以放置​​更多的消费者,以便您可以并行处理。
    猜你喜欢
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2018-02-12
    • 2012-12-21
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多