Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Kafka Streams-创建流与注入现有流bean_Java_Spring_Spring Boot_Apache Kafka Streams - Fatal编程技术网

Java Spring Kafka Streams-创建流与注入现有流bean

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

我正在用Kafka Streams创建一个基于Spring的服务,并注意到当我使用现有的@Bean KStream与为该流创建一个流时,会有很大的耗时差异

假设我有以下代码:

@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,并期望它会非常快。。。但是,也许我还是错了。。我不明白为什么这么慢。