【问题标题】:Is Kafka able to have a dynamic number of consumers?Kafka 是否能够拥有动态数量的消费者?
【发布时间】:2016-01-23 15:22:34
【问题描述】:

我们正在寻找一个新的消息传递平台,并将我们的选择范围缩小到 RabbitMQ 或 Kafka。

目前,我倾向于使用 Kafka,但考虑到我们的要求之一,我怀疑这是一个不错的选择。

我们需要有一个被未知数量的消费者消费的队列。也就是说,当“工人”上线进行处理时,我们需要动态添加和删除消费者。此外,工人可能随时下班。

例如,我们可能会启动一个根本没有消费者的队列,然后消费者的数量可能会增长到 30。稍后它可能会增长到 5000 或更多,然后又下降到 3。

我们不关心这个特定用例的消息顺序。卡夫卡适合这个吗?

此外,我们还计划维护一个消费者线程池,以便工作人员可以抓取一条消息并对其进行处理。因此,池中可能有 100 个消费者,而只有 20 个工人。由于消息发送缓冲,我们是否有可能在其他 80 个消费者中得到未在工作人员中使用的消息?换句话说,Kafka 是否像某些消息传递系统那样在请求消费者之前将消息预先传递给消费者?

【问题讨论】:

    标签: jms rabbitmq messaging apache-kafka


    【解决方案1】:

    是的,kafka 绝对能满足你的要求。您可以拥有多对多的生产者/消费者。如果您的所有消费者都在同一个消费者组中,则所有消息将在所有消费者之间平均分配。如果你关闭/添加新的消费者也不是问题,kafka 会自动为你管理。

    关于你的最后一个问题 - kafka 消费者是基于拉取的,因此消费者有责任检查是否有一些消息要处理。

    【讨论】:

    • 感谢您的回答。这是非常有帮助的。你说所有消息都会在所有消费者之间平均分配,但是如果其中一个消费者处理速度真的很慢而其他消费者处理得很快呢?队列是否会等待慢的?这并不理想。
    • @WickedElephant 是的,在这种情况下,缓慢的消费者可能会使消费者群体变慢。但这是在分区很少的情况下(例如 1 或 2)。实际上,在消费者之间平均分配的不是消息,而是 kafka 分区。因此,如果您有足够的分区,所有消费者都会快速工作。
    • 再次感谢您的回答。在考虑了这一点之后,我不知道这是否对我们有用,因为我们无法知道我们需要多少个分区。而且我们不能在 kafka 中根据需要动态添加/删除分区。我们最终会遇到这样的情况:我们在没有消费者的分区中有消息。我意识到这是一个奇怪的用例,但似乎 kafka 可能不适合这个用例。
    猜你喜欢
    • 1970-01-01
    • 2020-09-19
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多