混合高级 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 进行进一步处理。