混合高级 DSL 和低级 Processor API

Kafka Streams 提供了两种 API 变体。 它有一个更高级的 DSL 类似 API,您可以链式调用各种操作,这对于许多函数式程序员来说可能很熟悉。 Kafka Streams 还提供了对低级 Processor API 的访问。 Processor API 虽然功能强大,并能以更低的级别控制事物,但其本质是命令式的。 Spring Cloud Stream 的 Kafka Streams 绑定器允许您使用高级 DSL 或混合使用 DSL 和 Processor API。 混合使用这两种变体为您提供了大量选项来控制应用程序中的各种用例。 应用程序可以使用 transformprocess 方法 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 继续进一步处理。