跳到主要内容
版本:5.0.1

状态存储

DeepSeek V3 中英对照 State Store

当使用高级DSL并调用那些触发状态存储的适当方法时,Kafka Streams会自动创建状态存储。

如果你想将传入的 KTable 绑定具体化为一个命名的状态存储,那么你可以使用以下策略来实现。

假设你有以下函数。

@Bean
public BiFunction<KStream<String, Long>, KTable<String, String>, KStream<String, Long>> process() {
...
}

然后通过设置以下属性,传入的 KTable 数据将被物化到指定的状态存储中。

spring.cloud.stream.kafka.streams.bindings.process-in-1.consumer.materializedAs: incoming-store

你可以在应用程序中将自定义状态存储定义为 Bean,这些 Bean 将被绑定器检测并添加到 Kafka Streams 构建器中。特别是在使用处理器 API 时,你需要手动注册状态存储。为此,你可以在应用程序中将 StateStore 创建为 Bean。以下是定义此类 Bean 的示例。

@Bean
public StoreBuilder myStore() {
return Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("my-store"), Serdes.Long(),
Serdes.Long());
}

@Bean
public StoreBuilder otherStore() {
return Stores.windowStoreBuilder(
Stores.persistentWindowStore("other-store",
1L, 3, 3L, false), Serdes.Long(),
Serdes.Long());
}

这些状态存储随后可以被应用程序直接访问。

在引导过程中,上述bean将由绑定器处理并传递给Streams构建器对象。

访问状态存储:

Processor<Object, Product>() {

WindowStore<Object, String> state;

@Override
public void init(ProcessorContext processorContext) {
state = (WindowStore)processorContext.getStateStore("mystate");
}
...
}

在注册全局状态存储时,这种方法将无法生效。如需注册全局状态存储,请参阅下方关于自定义 StreamsBuilderFactoryBean 的部分。