如何在将消息传递给消费者之前对其进行过滤?

How to filter messages before passing them on to consumers?

我正在使用 Kafka 创建一个线索和事件管理系统。问题是我们收到了很多假线索(广告)。我们的系统中也有很多消费者。有没有办法在到达消费者之前过滤广告? 我的解决方案是将所有内容写入第一个主题,然后由过滤器消费者读取,然后将其写回第二个主题或对其进行过滤。 但我不确定它是否有效。有什么想法吗?

是的——事实上,我基本上相信这是您在您的环境中处理问题的方式。因为 Kafka 只对数据的高效传输有用,它本身在清理你的数据方面无能为力。使用您从中间消费者那里获得的所有信息,中间消费者可以 运行 进行自己的测试以确定哪些内容通过了过滤器,并推送到不同的主题/分区(根据您的需要)以获取最佳数据。

您可以使用 Spark Streaming:https://spark.apache.org/docs/latest/streaming-kafka-integration.html

您可以将 Kafka Streams (http://kafka.apache.org/documentation.html#streamsapi) 与 0.10.+ 版本的 Kafka 一起使用。我认为这完全适合您的用例。

看看 Confluent 的 KSQL。 (它是免费和开源的,https://www.confluent.io/product/ksql/。)它在底层使用 Kafka Streams,你可以在服务器端定义你的 ksql 查询和 tables,其结果被写入 kafka 主题,所以你可以只使用这些主题,而不是编写代码来创建一个中间过滤消费者。您只需要编写 ksql table "ddl" 或查询。