Java 如何使用Quarkus通过拓扑启动Kafka Streams管道
我正在关注这个问题,不太明白如何启动管道 在本教程中,Java 如何使用Quarkus通过拓扑启动Kafka Streams管道,java,apache-kafka-streams,quarkus,Java,Apache Kafka Streams,Quarkus,我正在关注这个问题,不太明白如何启动管道 在本教程中,org.apache.kafka.streams.StreamsBuilder用于构建描述管道的org.apache.kafka.streams.Topology。构建拓扑的方法用@products注释。在本文中,描述了这足以运行Kafka Streams管道。在本教程中,还公开了http端点。这在我当前实现的服务中不是必需的。此外,在本例中,从未显式调用provider方法。当我在没有端点的情况下启动应用程序时,管道不会启动 在管道中使用拓
org.apache.kafka.streams.StreamsBuilder
用于构建描述管道的org.apache.kafka.streams.Topology
。构建拓扑的方法用@products
注释。在本文中,描述了这足以运行Kafka Streams管道。在本教程中,还公开了http端点。这在我当前实现的服务中不是必需的。此外,在本例中,从未显式调用provider方法。当我在没有端点的情况下启动应用程序时,管道不会启动
在管道中使用拓扑显式实例化。但是这里的属性必须手动设置,并且配置不是从quarkus.kafka流中获取。
properties
问题是:如何使用第一个教程中的Topology builder启动它所描述的管道?最佳情况是自动应用来自quarkus.kafka streams.
的配置
使用:
Java OpenJDK 11.0.8
Quarkus版本:1.8.0.最终版
- 解决了问题:无法保证完全正确。只是想和大家分享解决我问题的方法
最重要的是使用正确的
@products
javax.enterprise.inject.products
必须用于拓扑
生成方法javax.ws.rs.products
还可用于定义输出的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)
注释拓扑
生成方法可能需要告诉quarkus
使用此方法构建拓扑。我不知道框架的内部结构,但我怀疑使用了默认拓扑,并且@AlternativePriority
赋予自定义方法比默认拓扑更高的优先级,这解决了问题:无法保证完全正确。只是想和大家分享解决我问题的方法
最重要的是使用正确的@products
javax.enterprise.inject.products
必须用于拓扑
生成方法javax.ws.rs.products
还可用于定义输出的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)
注释拓扑
生成方法可能需要告诉quarkus
使用此方法构建拓扑。我不知道框架的内部结构,但我怀疑使用了默认拓扑,并且@AlternativePriority
赋予自定义方法比默认拓扑更高的优先级