如何使用Apache Kafka进行内容过滤?

时间:2018-03-01 00:47:55

标签: java apache-kafka

我有一个名为mytopic的主题。此主题有一个生产者和两个消费者。我需要做的是根据前缀过滤生产者生成的消息。例如,如果邮件以' a'开头。前缀,那么只有第一个消费者必须接受它。如果以' b'开头前缀,那么只有第二个消费者必须接受它。

我做了很多搜索,我找到的是过滤来自主题的消息,然后在过滤后将它们发送到不同的主题。但如上所述,我需要对一个主题进行过滤。我怎么能在卡夫卡那样做呢?

2 个答案:

答案 0 :(得分:2)

这很容易,也不需要回写不同的主题 ' 2消费者'是指2个消费者群体或1个消费群体中的2个消费者群体? 我会谈两个。

如果是1个消费者群组中的2个消费者话题,则可以使用消息' Key'场。
Kafka发送相同的' Key'消息到同一分区'。
例如,消息前缀' a'使用关键字段' a',b消息前缀' b'使用关键字段' b'然后Kafka会将消息发送到' Partition-1',b消息到' Partition-2'。 消费者线程A可以订阅指定的' mytopic-Partition-1'线程B可以订阅mytopic-Partition-2' mytopic-Partition-2' 使用'分配'类中的方法' org.apache.kafka.clients.consumer.KafkaConsumer'。

如果是2个消费者群体,只需订阅主题并过滤代码。如果不满意,请使用上述相同的方法。
技巧是将特定的前缀消息发送到特定的分区'
如果你真的想要过滤器,也许你可以使用Kafka Connect插件。

答案 1 :(得分:1)

一旦您使用 java stream 获取记录过滤,并使用特定于使用者的过滤器逻辑,就允许消费者使用所有数据。

简而言之,我的意思是按原样获取数据并使用java代码过滤它们,而不是在Kafka Level上进行过滤。

<强>更新

如果您要在 Kafka级别进行过滤,则可以使用分区,同时向kafka主题发送消息,发送带有前缀&#39; a&的消息#39; to Partition-1,以及带有前缀&#39; b&#39;的消息分区-2

现在,只消费消费各个消费者中的特定分区