【问题标题】:How to scale to thousands of producer-consumer pairs in Kafka?如何在 Kafka 中扩展到数千个生产者-消费者对?
【发布时间】:2021-07-29 01:53:09
【问题描述】:

我有一个用例,我想让成千上万的生产者编写消息,这些消息将被成千上万的相应消费者消费。每个生产者的消息只针对一个消费者。

回顾herehere 的核心概念:似乎每个消费者-生产者对都应该有自己的主题。这是正确的理解吗?我也调查了消费者群体,但似乎他们更适合并行消费。

现在我有多个生产者-消费者对共享很少的主题,但正因为如此(我认为)我不得不读取消费者中的大量消息并通过密钥将它们过滤掉以获取特定生产者的消息。随着我的系统扩展,这可能需要很多时间。此外,如果我必须删除检查点,这将更加成问题,因为它从一开始就开始读取。

创建数千个主题是解决此问题的方法吗?或者还有其他方法可以使用分区、消费者组等概念吗?生产者和消费者都是火花流/批处理应用程序。谢谢。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    每个生产者的消息只针对一个消费者

    假设您提交了偏移量,并且不允许重试,这是所有 Kafka 消费者(或者更确切地说,消费者组)的预期行为

    似乎每个消费者-生产者对都应该有自己的主题

    不是真的。正如你所说,你有多对多的客户关系。您不需要提前知道一对;生产者可以在没有预期消费者的情况下发送数据,那么未来的任何消费者应用程序都应该能够订阅该主题以获取他们感兴趣的数据。

    共享很少的主题,但正因为如此(我认为)我不得不阅读消费者中的大量消息,并通过密钥将它们过滤掉以获取特定生产者的消息。随着我的系统扩展,这可能需要很长时间

    在更高的生产率上,消耗将线性地花费更多时间,是的,分区是解决这个问题的方法。除此之外,您还需要更快的网络和处理速度。你仍然需要消费和反序列化才能过滤,所以过滤器不是这里的瓶颈。

    创建数千个主题是解决这个问题的方法吗?

    最终取决于你的数据,但我猜不是。

    【讨论】:

    • “在更高的生产率上,消费将花费线性更多的时间” - 问题是,如果我有 1000 个生产者写入同一个主题,那么一个消费者需要阅读整个主题(最后7 天),然后过滤到其特定消息。所以这使得过滤成为瓶颈,不是吗? (如果有一个检查点(火花流),我知道它只会从那个偏移量读取,但是如果引入了一个新的消费者,它必须从主题的开头开始)
    • 生产者数量无关紧要;这是他们生产的速度。除非过滤器需要使用外部长时间运行的进程,否则不清楚这是一个瓶颈,因为相等性检查/条件将是 O(1) 恒定时间,而单独消耗是 O(n) 线性时间。
    猜你喜欢
    • 2017-09-07
    • 2016-07-12
    • 2020-05-26
    • 2021-04-24
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    相关资源
    最近更新 更多