【问题标题】:Filtering in Kafka and other streaming technologiesKafka 和其他流技术中的过滤
【发布时间】:2022-01-26 02:46:07
【问题描述】:

我目前正在研究使用哪种流处理技术。到目前为止,我已经研究了消息队列技术和流框架。我现在倾向于使用 Apache Kafka 或 Google Pub/Sub。

我的要求:

  • 实时传递、阅读和处理消息/事件。
  • 消息/事件的持久性。
  • 能够实时过滤消息/事件,而无需阅读整个主题。例如:如果我有一个名为“详细信息”的主题,我希望能够从该主题中过滤掉事件属性等于某个值的消息/事件。
  • 能够查看某个主题或队列的生产者是否已完成。
  • 能够根据事件中等于某个值的属性删除主题中的消息/事件。
  • 消息/事件中的排序。

我的问题是:什么是这些用例的最佳框架/技术?从我目前所读到的内容来看,Kafka 没有为主题中的消息/事件提供开箱即用的过滤方法,而 Google Pub/Sub 确实有一种过滤方法。

欢迎任何建议和经验。

【问题讨论】:

  • 队列几乎从来没有使用任何技术的消费过滤器。但是,如果您正确分片/分区,则无需阅读整个主题。另外,如果您需要持久性、随机删除、搜索功能,您将需要一个带有索引的实际数据库。您可以使用 Pinot/Druid/Couchbase 与 Kafka 摄取
  • @OneCricketeer 我想防止在数据库或文档存储中持久化。目前我有一个服务,它执行一些操作并将每一行存储在 MongoDB 中,前端由 ChangeStreams 更新。正如预期的那样,这很慢,这就是为什么我正在考虑使用像 Kafka 这样的流式处理框架。
  • 如果你必须更快地更新前端,你需要 websockets,而不是 Kafka

标签: apache-kafka google-cloud-pubsub


【解决方案1】:

根据您提到的要求,kafka 似乎很合适,使用 kafka 流或 KSQL 您可以实时执行过滤,这是一个示例 https://kafka-tutorials.confluent.io/filter-a-stream-of-events/confluent.html

您需要的不仅仅是集成和数据传输,您还需要类似于所谓的 ETL 工具,在这里您可以找到更多关于 GCP 中的 ETL 和工具https://cloud.google.com/learn/what-is-etl

【讨论】:

  • 感谢您的澄清。那我基本上可以走任何一条路;这些用例的 ETL 和/或 Kafka。将深入研究 ETL 和那里的可能性,看看它是如何工作的,同时也会关注扩展能力。关于 Kafka 中的 KSQL,据我所知,这只能直接在流上完成,对吗?
  • 除了我之前的评论和关于我的用例的一些补充说明:我有一个运行某些进程的微服务,我想显示它以立即输出到前端(并最终保存) .我一直在通过 MongoDB 执行此操作,我在其中显示结果并相应地逐行存储。这太慢了,因此我需要实时流式传输输出,一旦一个过程完成,我就可以存储在 MongoDB 中并切换到存储的数据。
  • 确实有更多关于用例的细节 Kafka 看起来比 etl 更好,您可以使用 kafka 或 kafkastream apis 创建微服务,它们都是实时工作的,您可以在微服务中进行过滤,例如在这里可以看到以 quarkus 作为框架的相同内容,但您可以在其他框架中找到类似的内容quarkus.pro/guides/kafka.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 2017-02-08
相关资源
最近更新 更多