본문으로 이동
문서

컬리 검색이 카프카를 들여다본 이야기 2

서민우 · 컬리 · 컬리 기술 블로그

원본 보기

소개

카프카 스트림즈를 추가하다

AI 핵심 요약

검색 인덱싱에 필요한 두 토픽의 데이터를 합치기 위해 Redis를 중간 저장소로 쓰던 구조를 더 단순하게 만들고자 Kafka Streams를 도입했다. KStream과 KTable을 같은 키로 조인해 병합 메시지를 발행하고, Spring Kafka의 @EnableKafkaStreams와 StreamsBuilder 주입을 적용해 클라이언트 생명주기를 스프링이 관리하도록 바꿨다. 테스트 환경의 규격에 맞지 않는 메시지로 스트림 스레드가 모두 종료됐지만 애플리케이션 상태는 정상으로 남는 문제를 발견해, HealthIndicator로 Kafka Streams 상태를 확인하는 헬스체크를 추가했다. 스트림 처리 로직뿐 아니라 장애 상태를 운영 환경에서 감지할 수 있도록 구성하는 것이 중요하다는 점을 확인했다.

  • Kafka Streams의 KStream과 KTable 조인은 같은 키를 기준으로 여러 토픽의 데이터를 결합하는 데 활용할 수 있다.
  • Spring Kafka의 @EnableKafkaStreams와 StreamsBuilder 주입을 사용하면 스트림 클라이언트의 생성과 생명주기 관리를 스프링에 맡길 수 있다.
  • 메시지 규격 오류로 스트림 스레드가 모두 종료돼도 애플리케이션 자체는 정상으로 보일 수 있으므로 별도 상태 점검이 필요하다.
  • HealthIndicator에서 KafkaStreams 상태를 확인해 오류나 종료 상태를 헬스체크 결과에 반영할 수 있다.