잡동사니

반응형

질문

Kafka Streams를 사용하여 Spring 기반 서비스를 만들고 있으며 기존 @Bean KStream VS를 사용하여 해당 스트림에 대한 스트림을 생성 할 때 시간이 많이 걸리는 것으로 나타났습니다.

다음 코드가 있다고 가정 해 보겠습니다.

@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(...);
}

콘솔 소비자를 사용하는 소비자가 있습니다. 첫 번째 접근 방식에서는 데이터가 도착하는 데 몇 초가 걸리지 만 두 번째 접근 방식에서는 필터링 된 데이터를 즉시 가져옵니다!

차이점이 무엇인지 설명해 주시겠습니까?첫 번째 접근 방식에서 메시지가 소비자에게 도착하는 데 몇 초가 걸리는 이유는 무엇입니까?가장 좋은 방법은 무엇입니까?

감사!


답변1

접근법 # 2는 기존 KStream 에 필터 프로세서 노드를 추가하기 때문에 더 빠릅니다. 접근법 # 1의 소스 토픽에서 완전히 새로운 KStream읽기를 생성하는 것과는 대조적입니다.

토폴로지에 따라 다르지만 강력한 이유가 없다면 # 2부터 시작하겠습니다.



 

 

 

 

출처 : https://stackoverflow.com/questions/59126574/spring-kafka-streams-create-stream-vs-inject-an-existing-stream-bean

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band