我正在用Spring Kafka编写Spring Boot应用程序。 由于我的应用程序专注于Kafka Streams,并且我需要使用交互式查询并查询我的状态存储,我想知道:是否有通过Spring Kafka访问kafka流状态存储的任何特定方式?
据我所见,Spring Cloud Stream Binder Kafka Streams对交互式查询有一些支持,但是我在Spring Kafka中找不到关于它们的任何内容。 我是否缺少某些东西,或者在Spring-Kafka中没有支持?
如果是这样-在创建自己的org.springframework.cloud.stream.binder.kafka.streams.InteractiveQueryService
版本时,我应该特别注意什么?
当我仅使用Kafka和Kafka Streams时,包括Spring Cloud Streams似乎有点过多,但是如果提供的交互式查询支持很难独自实现,也许还是建议将其包括在内吗?我将不胜感激。
答案 0 :(得分:0)
如果您使用Spring-Kafka和Kafka-Streams, 我建议您将KafkaStreams定义为@Bean,这样spring会处理对象的生命周期,例如
@Configuration
public class KafkaConfig{
@Bean
KafkaStreams ingestAndAggregateStream(KafkaProperties kafkaProps){
Topology t....
KafkaStreams stream = new KafkaStreams(t,kafkaProps.buildStreamsProperties())
stream.start();
return stream;
}
}
完成此操作后,您可以在控制器中自动连接流并将其用于检索和查询本地KVStore
@RestController
public class StreamingController {
private final KafkaStreams ingestAndAggregateStream;
public StreamingController(KafkaStreams ingestAndAggregateStream){
this.ingestAndAggregateStream = ingestAndAggregateStream;
}
@RequestMapping(value = "/queryStore", method = RequestMethod.GET)
@ResponseBody
public Value getKVStoreValue(@RequestParam String key){
ReadOnlyKeyValueStore<String, Value> store = ingestAndAggregateStream
.store("KV_STORE_NAME",
QueryableStoreTypes.<String, Value>keyValueStore());
return store.get(key);
}
}