[英]KafkaStreams interactive queries with Spring-Kafka
我正在用 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 似乎有点过分,但是如果提供交互式查询支持,那么我自己很难实现,也许建议无论如何都包含它? 我将不胜感激任何建议。
好吧,如果您使用 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;
}
}
完成此操作后,您可以在控制器中自动连接流并使用它来检索和查询 LOCAL 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);
}
}
如果您的应用程序上有@EnableKafkaStreams
,那么您可以自动装配StreamsBuilderFactoryBean
。 您可以注入StreamsBuilderFactoryBean
,然后使用.getKafkaStreams()
从中获取KafkaStreams
对象:
@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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.