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

mal*_*ouk 2 apache-kafka kafka-consumer-api apache-kafka-streams

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

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

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

谢谢!

Mat*_*Sax 7

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

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

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