实现kafka消息的文件

时间:2016-11-02 09:52:48

标签: apache-kafka kafka-consumer-api kafka-producer-api

我最近开始使用Kafka并评估Kafka几个用例。

如果我们想要根据消息内容提供过滤消息(订阅者)消息的功能,那么这样做的最佳方法是什么?

说一个名为" Trades"由生产者公开,其具有不同的交易细节,如市场名称,创建日期,价格等。

有些消费者对特定市场的交易感兴趣,而其他消费者对特定日期后的交易感兴趣等(基于内容的过滤)

由于在经纪人方面无法进行过滤,实施以下案例的最佳方法是什么:

  1. 如果过滤条件特定于消费者。我们应该使用吗? 消费者拦截器(虽然拦截器被建议用于记录 根据文件的目的)?
  2. 如果过滤标准(基于内容的过滤)在消费者中很常见,那么该方法应该是什么?
  3. 收听主题并在本地过滤消息并写入新主题(使用拦截器或流)

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题是正确的,那么您有一个主题和不同的消费者对该主题的特定部分感兴趣。同时,你不拥有这些消费者,并希望避免那些消费者只是阅读整个主题并自己进行过滤?

为此,构建新应用程序的唯一方法是读取整个主题,过滤(或实际拆分)并将数据写回两个(多个)不同的主题。外部消费者会从这些新主题中消费,只收到他们感兴趣的日期。

为此目的使用Kafka Streams是一个非常好的方法。 DSL应该提供您需要的一切。

作为替代方案,您只需使用KafkaConsumerKafkaProducer编写自己的应用程序,即可在用户代码中手动进行过滤/拆分。这与使用Kafka Streams没有太大区别,因为Kafka Streams应用程序会在内部执行完全相同的操作。但是,使用Streams,您完成任务的努力将会更少。

我不会为此使用拦截器。即使这样也行不通,似乎对你的用例来说似乎不是一个好的软件设计。

答案 1 :(得分:0)

创建自己的拦截器类,该类实现org.apache.kafka.clients.consumer.ConsumerInterceptor并在方法' onConsume'中实现您的逻辑。在设置拦截器之前'为消费者配置。