[英]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.