Kafka流过滤:经纪人还是消费者?

时间:2017-10-06 16:58:48

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

我正在研究卡夫卡流。我想过滤我的流,使用选择性很低的过滤器(几千个)。我在看这个方法: https://kafka.apache.org/0100/javadoc/org/apache/kafka/streams/kstream/KStream.html#filter(org.apache.kafka.streams.kstream.Predicate)

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

如果在消费者方面进行评估,有什么办法,如何在经纪人中做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

不支持代理端过滤的原因是,代理只使用(1)字节数组作为键和值数据类型,并使用(2)零复制机制来实现高吞吐量。需要经纪人端过滤,以便在经纪人端对数据进行反序列化,这将是一个主要的性能损失(反序列化成本和无零拷贝优化)。

答案 1 :(得分:0)

如果您想进行服务器端过滤,建议您使用KSQL。它支持一种类似于SQL的强大机制来过滤服务器端的消息。但是为此,您将不得不花费更多的资源来设置KSQL服务器,这涉及高可用性,复制以及其他问题。

因此,如果您的消息吞吐量为十进制千位/秒,那么我将使用KStreams;如果您的消息量更大,过滤条件更复杂,那么我将使用KSQL。