2017-10-06 74 views
1

我正在调查kafka溪流。我想过滤我的流,使用选择性非常低的过滤器(几千个之一)。我正在看这种方法: https://kafka.apache.org/0100/javadoc/org/apache/kafka/streams/kstream/KStream.html#filter(org.apache.kafka.streams.kstream.Predicate)卡夫卡流过滤:经纪人还是消费者方?

但我找不到任何证据,如果过滤器将由消费者评估(我真的不想将大量的GB转移到消费者,只是把它们扔掉),或者在经纪人内部(耶!)。

如果在消费者方面进行评估,是否有任何方法,如何在经纪人这样做?

谢谢!

回答

2

卡夫卡不支持代理端过滤。如果您使用Streams API,则将在您的应用程序中进行过滤(谓词不会由KafkaConsumer进行评估,而是在拓扑的“处理器节点”内 - 即在Streams API运行时代码中)。

这可能有助于:https://docs.confluent.io/current/streams/architecture.html

其原因不支持代理侧滤波,该经纪人只使用(1)字节数组作为键和值的数据类型和使用(2)零复制机制,以实现高吞吐量。经纪人侧过滤将需要,反序列化在经纪人端的数据什么是主要的性能影响(反序列化成本和零拷贝优化)。

+0

好吧......即使只用过滤键,我也可以。对于我来说,如果kafka只是可以使用“前缀”数组过滤(我的密钥是字符串,并且我可以选择要匹配的前缀),那么传输很多GB数据就会小得多... – malejpavouk

+1

您可以随时创建一个功能请求Jira:https://issues.apache.org/jira/projects/KAFKA –

+0

好点。我创建了一个改进请求:https://issues.apache.org/jira/browse/KAFKA-6020,让我们看看他们是否会喜欢这个想法:-) – malejpavouk