【问题标题】:spring-kafka: Use Interactive queries in Spring Bootspring-kafka:在 Spring Boot 中使用交互式查询
【发布时间】:2020-10-16 20:17:57
【问题描述】:

在 Kafka Streams + Spring Boot 应用程序中配置(提供主机和端口信息)和访问交互式查询的“惯用”方式是什么?

访问KafkaStreams实例以访问状态存储的正确方法是什么?

我知道spring-cloud-stream 中的InteractiveQueriesService,但我不只是将spring-kafka 库与Spring Boot 一起使用。

谢谢

【问题讨论】:

    标签: spring-boot apache-kafka-streams spring-kafka


    【解决方案1】:

    Spring Boot 自动配置 Kafka Streams 支持:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-kafka-streams

    下面的基础设施隐藏在StreamsBuilderFactoryBean 中。 请参阅 Spring for Apache Kafka 文档:https://docs.spring.io/spring-kafka/docs/2.6.2/reference/html/#streams-spring

    因此,您确实可以使用 API StreamsBuilderFactoryBean.getKafkaStreams() 访问该 spawn KafkaStreams 实例。

    没有对交互式查询的高级支持,但可能可以访问该KafkaStreams 实例,继续进行状态存储交互应该不会那么难。看起来InteractiveQueryService 只是KafkaStreams 的一个委托。

    【讨论】:

    • 嗨,Artem。您的回答总是受到赞赏。刚刚创建了一个小型 POC gist.github.com/gAmUssA/69d4d6da2cf06b5015b3514f14a8e210。主要关心的是如何访问KafkaStreams。我正在尝试将其注入 RestController 但在休息控制器初始化期间 KafkaStreams 实例可能不可用。所以我使用EventListener 在上下文刷新后更新实例。它可以工作,但对我来说看起来像是 hack。你能建议一种更好/惯用的方法吗?
    • 是的,你不能从 ctor 那里做streamsBuilderFactoryBean.getKafkaStreams(),就在注入之后。该内部KafkaStreams 实例稍后从start() 阶段初始化。我认为从您的 getValue() REST 方法中使用 streamsBuilderFactoryBean.getKafkaStreams() 没有什么大问题。或者您可以通过一些private 方法“按需”初始化它...另一方面,您的@EventListener(ContextRefreshedEvent.class) 也可以。因为这确实是我们已经开始StreamsBuilderFactoryBean 的时候了。
    猜你喜欢
    • 2019-06-05
    • 2019-09-19
    • 2020-07-21
    • 2021-01-24
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2020-12-02
    • 2015-07-27
    相关资源
    最近更新 更多