繁体   English   中英

如何使用 Quarkus 通过拓扑启动 Kafka-Streams 管道

[英]How to start a Kafka-Streams Pipeline by Topology using Quarkus

我正在关注Quarkus Kafka-Streams 教程,但不太明白如何启动管道。

在本教程中, org.apache.kafka.streams.StreamsBuilder用于构建描述管道的org.apache.kafka.streams.Topology 构建拓扑的方法用@Produces注释。 在这个备忘单中,它描述了这足以运行 Kafka-Streams 管道。 在本教程中,额外公开了一个 http 端点。 这在我目前正在实施的服务中不是必需的。 同样在示例中,provider 方法从未被显式调用。 当我在没有端点的情况下启动应用程序时,管道没有启动。

本教程中,管道使用拓扑显式实例化。 但是这里的属性必须手动设置,并且配置不是从quarkus.kafka-streams.<something>属性中获取的。

问题是:如何使用第一个教程中的拓扑构建器来启动它所描述的管道? 最佳情况是自动应用来自quarkus.kafka-streams.<something>的配置。

使用:

  • Java OpenJDK 11.0.8
  • Quarkus Version: 1.8.0.Final

找出问题:不能保证完全正确。 只是想分享解决我问题的方法。

最重要的是使用正确的@Produces javax.enterprise.inject.Produces必须用于Topology生成方法。 javax.ws.rs.Produces还可用于定义输出的 MediaType,但不是强制性的:


    @javax.ws.rs.Produces( MediaType.TEXT_PLAIN )
    @Produces
    @AlternativePriority( 1 )
    public Topology buildTopology() {
        ...
    }

Kafka Streams一个实例在启动时由框架自动构建。 运行管道所需的全部内容如下:


@ApplicationScoped
public class YourApplication {
    private final KafkaStreams streams;

    public NasDistributorApplication( final KafkaStreams streams ) {
        this.streams = streams;
    }

    public void onStart( @Observes final StartupEvent startupEvent ) {
        streams.start();
    }

    public void onStop( @Observes final ShutdownEvent shutdownEvent ) {
        streams.close();
    }

}

可能需要通过@AlternativePriority( 1 )注释Topology生成方法来告诉quarkus使用此方法来构建Topology 我不知道框架的内部结构,但我怀疑使用了默认拓扑, @AlternativePriority为自定义方法提供了比默认Topology更高的优先级

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM