Java Spring Kafka Streams-创建流与注入现有流bean
我正在用Kafka Streams创建一个基于Spring的服务,并注意到当我使用现有的@Bean KStream与为该流创建一个流时,会有很大的耗时差异 假设我有以下代码:Java Spring Kafka Streams-创建流与注入现有流bean,java,spring,spring-boot,apache-kafka-streams,Java,Spring,Spring Boot,Apache Kafka Streams,我正在用Kafka Streams创建一个基于Spring的服务,并注意到当我使用现有的@Bean KStream与为该流创建一个流时,会有很大的耗时差异 假设我有以下代码: @Autowired private StreamsBuilder eventsStreamsBuilder; @Bean("eventsKStream") public KStream<String, String> eventsKStream() { KStream<String, Stri
@Autowired
private StreamsBuilder eventsStreamsBuilder;
@Bean("eventsKStream")
public KStream<String, String> eventsKStream() {
KStream<String, String> stream = eventsStreamsBuilder.stream(...);
stream.to("NEW_TOPIC");
return stream;
}
// 1. First approach, create a stream for the "NEW_TOPIC" and filter it
@Bean("eventsFilterKStream")
public KStream<String, String> eventsFilterKStream() {
return eventsStreamsBuilder.stream("NEW_TOPIC",....)
.filter()
}
// 2. Second approach, inject the existing Stream Bean and filter it
@Bean("eventsFilterKStream")
public KStream<String, String> eventsFilterKStream(@Qualifier("eventsKStream") KStream<String, String> eventsKStream) {
return eventsKStream.filter(...);
}
@Autowired
私有StreamsBuilder事件StreamsBuilder;
@Bean(“eventsKStream”)
public KStream eventsKStream(){
KStream stream=eventsstreambuilder.stream(…);
流向(“新主题”);
回流;
}
// 1. 第一种方法,为“新主题”创建一个流并对其进行过滤
@Bean(“事件过滤流”)
public KStream事件filterkstream(){
return eventsstreambuilder.stream(“新主题,…)
.filter()
}
// 2. 第二种方法,注入现有的流Bean并对其进行过滤
@Bean(“事件过滤流”)
public KStream eventsFilterKStream(@Qualifier(“eventsKStream”)KStream eventsKStream){
返回eventsKStream.filter(…);
}
我有一个消费者,使用控制台消费者。。。注意到对于第一种方法,数据需要几秒钟才能到达,但是在第二种方法中,我会立即得到过滤后的数据
你能解释一下有什么区别吗?
为什么第一次接近需要几秒钟的时间,信息才能到达消费者?
最好的方法是什么
谢谢 方法#2速度更快,因为它向现有的KStream
添加了一个过滤器处理器节点,而不是在方法#1中创建一个全新的KStream
读取源主题
这取决于您的拓扑结构,但我会从#2开始,除非您有充分的理由不这样做。在第一种和第二种方法之间有几秒的延迟合理吗?我的意思是,我只是简单地将记录过滤到一个新的主题,然后为新的主题打开一个KStream,并期望它会非常快。。。但是,也许我还是错了。。我不明白为什么这么慢。