Apache kafka 卡夫卡流过滤:经纪人还是消费者?

Apache kafka 卡夫卡流过滤:经纪人还是消费者?,apache-kafka,kafka-consumer-api,apache-kafka-streams,Apache Kafka,Kafka Consumer Api,Apache Kafka Streams,我在看卡夫卡的溪流。我想用选择性很低的过滤器(几千分之一)过滤我的流。我在研究这个方法: 但我找不到任何证据,如果过滤器将由消费者评估(我真的不想将大量GB传输给消费者,只是为了扔掉它们),或者在代理内部(耶!) 如果从消费者的角度对其进行评估,有没有办法,在经纪人中如何进行评估 谢谢 Kafka不支持代理端筛选。如果使用Streams API,过滤将在应用程序中完成(谓词将不会由KafkaConsumer计算,而是在拓扑的“处理器节点”中进行计算——即在Streams API运行时代码中)

我在看卡夫卡的溪流。我想用选择性很低的过滤器(几千分之一)过滤我的流。我在研究这个方法:

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

如果从消费者的角度对其进行评估,有没有办法,在经纪人中如何进行评估


谢谢

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

这可能有助于:


不支持代理端筛选的原因是,代理仅使用(1)字节数组作为密钥和值数据类型,并使用(2)零拷贝机制来实现高吞吐量。代理端过滤是必需的,要在代理端反序列化数据,会对性能造成重大影响(反序列化成本和无零拷贝优化)。

如果您想进行服务器端过滤,我建议使用。它支持一个很好的类似SQL的机制来过滤服务器端的消息。但为此,您必须花费更多的资源来设置KSQL服务器,这涉及到高可用性、复制等问题


因此,如果您的消息吞吐量是十进制的千/秒,那么我将使用KStreams,如果您有更大的数量和更复杂的过滤场景,那么我将使用KSQL。

好吧……即使使用仅键过滤,我也会很好。对我来说,如果卡夫卡能够使用“前缀”数组过滤(我的键是字符串,我可以选择要匹配的前缀),比传输大量GB数据的影响要小得多……你总是可以创建一个功能请求Jira:好的。我创建了一个改进请求:,让我们看看他们是否会喜欢这个想法:-)您可以轻松地将过滤规则表示为Kafka Connect SMT(单消息转换)或KSQL语句吗?这些是在Kafka摄取管道中添加内联过滤的最简单方法。这仍然是一个客户端解决方案…我的问题是,我确实想从代理中传输这些消息…KSQL和streams都是客户端。你说KSQL是客户端是什么意思?这个设置是如何工作的?问题是关于在服务器(代理)内部进行过滤,因此当您有许多GB的流且选择性低时,流的大部分不会到达消费者(应用程序)。但是KSQL和kstream是客户机库==整个流到达所有客户机并进行过滤。