Apache kafka Kafka Streams DSL处理方法是如何工作的?

Apache kafka Kafka Streams DSL处理方法是如何工作的?,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我一直在使用Kafka Streams,并获得了一些基本功能,但我在Kafka Streams DSL中的处理方法方面遇到了一些困难。具体而言: 我知道有两种使用Kafka Streams的方法,较低级别的处理API和较高级别的Streams DSL。使用较低的级别,您可以更明确地定义拓扑,命名每个节点等,而Streams DSL将其中的大部分抽象出来 然而,更高级别的流DSL具有被调用的方法,该方法是终端操作,即该方法返回void。所以我的问题是,处理后的数据——处理器的void forwar

我一直在使用Kafka Streams,并获得了一些基本功能,但我在Kafka Streams DSL中的处理方法方面遇到了一些困难。具体而言:

我知道有两种使用Kafka Streams的方法,较低级别的处理API和较高级别的Streams DSL。使用较低的级别,您可以更明确地定义拓扑,命名每个节点等,而Streams DSL将其中的大部分抽象出来

然而,更高级别的流DSL具有被调用的方法,该方法是终端操作,即该方法返回void。所以我的问题是,处理后的数据——处理器的void forwardkey,value方法发送的数据——去了哪里


在较低级别的处理API中,您可以命名处理器节点,并可以将接收器链接到该名称,但在Streams DSL中没有名称,或者至少我找不到名称。

从DSL中的处理器转发数据是可能的,但很笨拙。如您所述,过程方法被定义为终端操作,因此,您不应该向前调用。如果您仍然调用forward,并且没有分配下游处理器,那么forward基本上是一个no-op


但是,与其尝试为流程添加一个下游处理器,不如使用transform和相关方法、transformValues、flatTransform和flatTransformValues,而不是下游发送数据。

我知道一些转换方法,我的困惑源于名称进程和处理API,假设它们之间的关系比它们更密切。幕后的变压器和处理器几乎是一样的。我并没有先看《变形金刚》,因为我认为我需要流程,因为我想使用forward。我不知道flatTransform也可以用于减少合并消息,因为在我看来,“扁平化”通常会将一些消息转换为更多的消息,而不是更少的消息,这就是我的用例。