apache-kafka - 如何在 Kafka 中扩展到数千个生产者-消费者对?
问题描述
我有一个用例,我想让成千上万的生产者编写消息,这些消息将被成千上万的相应消费者消费。每个生产者的消息都只针对一个消费者。
在这里和这里遍历核心概念:似乎每个消费者-生产者对都应该有自己的主题。这是正确的理解吗?我也调查了消费者群体,但似乎他们更倾向于并行消费。
现在我有多个生产者 - 消费者对共享很少的主题,但正因为如此(我认为)我必须阅读消费者中的大量消息,并通过密钥将它们过滤掉以获取特定生产者的消息。随着我的系统扩展,这可能需要很多时间。此外,如果我必须删除检查点,这将更加成问题,因为它从一开始就开始读取。
创建数千个主题是解决此问题的方法吗?或者还有其他方法可以使用分区、消费者组等概念吗?生产者和消费者都是火花流/批处理应用程序。谢谢。
解决方案
每个生产者的消息只针对一个消费者
假设您提交了偏移量,并且不允许重试,这是所有 Kafka 消费者(或者更确切地说,消费者组)的预期行为
似乎每个消费者-生产者对都应该有自己的主题
并不真地。正如你所说,你有多对多的客户关系。您不需要提前知道一对;生产者可以在没有预期消费者的情况下发送数据,那么将来的任何消费者应用程序都应该能够订阅该主题以获取他们感兴趣的数据。
分享的主题很少,但正因为如此(我认为),我不得不阅读消费者中的大量消息,并通过密钥将它们过滤掉以获取特定生产者的消息。随着我的系统扩展,这可能需要很多时间
在更高的生产率上,消耗将线性地花费更多时间,是的,分区是解决这个问题的方法。除此之外,您还需要更快的网络和处理速度。您仍然需要消耗和反序列化才能进行过滤,因此过滤器不是这里的瓶颈。
创建数千个主题是解决此问题的方法吗?
最终取决于您的数据,但我猜不是。
推荐阅读
- tensorflow - CNN模型批量大小和数据,预测相关问题
- javascript - 用简单的计算器解决问题
- python - 根据像素强度将 nxm 图像映射到 256 xm 矩阵
- installation - 根据 Inno Setup 中的任务选择将“true”/“false”写入 INI 文件
- php - Woo Commerce 仅允许一种类型的产品变体
- css - 如何在没有动画里程表的情况下“重置”css位置?
- typescript - Typescript 中类型的引用透明性
- r - R中的三项式回归问题
- reactjs - 如何使用 Nextjs 将 useRouter 推送到新的 url?
- python - 如何使用 webdriver selenium 从标签中单击按钮