Kafka 서버로 프로듀서가 데이터를 전송하는 것은 성공하였으나
Kafka 리스너가 Kafka 서버에서 데이터를 읽지 못하는 상황이 발생했습니다.
이 문제는 @KafkaListener
애노테이션을 사용하여 Kafka 메시지를 수신하는 Spring Boot 어플리케이션에서 나타났습니다.
문제의 핵심 원인은 Kafka 리스너에서 containerFactory
설정을 누락한 것이었습니다.
containerFactory
는 Kafka 리스너가 사용할 ConsumerFactory
와 관련 설정을 정의하는 데 사용됩니다.
이 설정을 제대로 지정하지 않으면, Spring Boot는 기본적으로 로컬 환경에 맞게 구성된 containerFactory
를 사용하게 됩니다.
이 경우, Kafka 리스너는 실제 Kafka 서버가 아닌 로컬 서버에서 데이터를 읽으려 시도하게 되며, 결과적으로 데이터를 제대로 수신하지 못하게 됩니다.
원인 파악
에러 로그와 설정을 분석하였더니 컨슈머가 카프카 서버를 로컬 서버로 인식한다는 점을 발견했습니다.
이를 통해 문제가 containerFactory
설정과 관련이 있다는 것을 파악했습니다.
KafkaConfig
클래스를 검토하여 ConsumerFactory
를 정의하는 메소드가 존재하는지 확인했습니다.
또한, 이 ConsumerFactory
를 사용하여 containerFactory
를 생성하고, 이를 Kafka 리스너에서 참조하고 있는지 확인했습니다.
KafkaConfig
클래스에 있는 containerFactory
를 생성하는 메소드를 @KafkaListener
애노테이션의 containerFactory
속성을 통해 명시적으로 참조하도록 설정했습니다.설정 변경 후 Kafka 리스너가 실제 Kafka 서버에서 데이터를 제대로 읽을 수 있는지 테스트하여 문제가 해결되었는지 확인했습니다.