我正在研究卡夫卡流。我想过滤我的流,使用选择性很低的过滤器(几千个)。我在看这个方法: https://kafka.apache.org/0100/javadoc/org/apache/kafka/streams/kstream/KStream.html#filter(org.apache.kafka.streams.kstream.Predicate)
但我无法找到任何证据,如果过滤器将由消费者评估(我真的不想将大量的GB转移给消费者,只是为了扔掉它们),或者在经纪人内部(yay) !)。
如果在消费者方面进行评估,有什么办法,如何在经纪人中做到这一点?
谢谢!
答案 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。