混合使用高级 DSL 和低级 Processor API

Kafka Streams 提供两种 API 变体。它有一个更高级别的 DSL 类 API,您可以在其中链接各种操作,这些操作可能对许多函数式程序员来说很熟悉。Kafka Streams 还提供了对低级 Processor API 的访问。Processor API 虽然功能强大,并且能够在更低的级别控制事物,但本质上是命令式的。Spring Cloud Stream 的 Kafka Streams 绑定器允许您使用高级别 DSL 或混合使用 DSL 和 Processor API。混合使用这两种变体为您提供了许多选项来控制应用程序中的各种用例。应用程序可以使用 `transform` 或 `process` 方法 API 调用来访问 Processor API。

以下是如何在使用 `process` API 的 Spring Cloud Stream 应用程序中组合 DSL 和 Processor API 的示例。

@Bean
public Consumer<KStream<Object, String>> process() {
    return input ->
        input.process(() -> new Processor<Object, String>() {
            @Override
            @SuppressWarnings("unchecked")
            public void init(ProcessorContext context) {
               this.context = context;
            }

            @Override
            public void process(Object key, String value) {
                //business logic
            }

            @Override
            public void close() {

        });
}

以下是如何使用 `transform` API 的示例。

@Bean
public Consumer<KStream<Object, String>> process() {
    return (input, a) ->
        input.transform(() -> new Transformer<Object, String, KeyValue<Object, String>>() {
            @Override
            public void init(ProcessorContext context) {

            }

            @Override
            public void close() {

            }

            @Override
            public KeyValue<Object, String> transform(Object key, String value) {
                // business logic - return transformed KStream;
            }
        });
}

`process` API 方法调用是一个终止操作,而 `transform` API 是非终止操作,它为您提供了一个可能已转换的 `KStream`,您可以使用它继续使用 DSL 或 Processor API 进行进一步处理。