피드로 돌아가기
Dev.toBackend
원문 읽기
ErrorHandlingDeserializer 도입을 통한 Kafka Consumer Poison Pill 문제 해결
How to Integrate Apache Kafka with Spring Boot: A Production-Ready Guide
AI 요약
Context
동기식 HTTP 호출의 의존성을 제거하기 위해 Kafka 기반 비동기 메시징 구조 채택. 단순 구현 시 잘못된 메시지 유입으로 인한 Consumer Group 전체의 처리 중단(Poison Pill) 리스크 존재.
Technical Solution
- KRaft 모드 기반 Kafka 브로커 구성으로 Zookeeper 의존성 제거 및 인프라 단순화
- JsonSerializer 및 JsonDeserializer 적용을 통한 Java Object 기반의 타입 안전한 메시지 전송 체계 구축
- ErrorHandlingDeserializer를 통한 역직렬화 예외 래핑으로 특정 메시지 오류가 전체 Consumer를 블로킹하는 현상 방지
- spring.json.trusted.packages 설정을 통한 허용 패키지 제한으로 Deserialization 기반 보안 취약점 제거
- Order ID 기반의 Key 설정을 통한 특정 엔티티별 메시지 순서 보장(Ordering Guarantee) 설계
실천 포인트
- 역직렬화 에러로 인한 Consumer 무한 루프 방지를 위해 ErrorHandlingDeserializer 적용 여부 확인 - 보안 강화를 위해 trusted-packages 설정을 통한 클래스 인스턴스화 범위 제한 - 메시지 순서가 중요한 도메인의 경우 적절한 Message Key 설정 여부 검토 - 운영 환경 고려 시 Dead Letter Topic(DLT) 및 RetryTopic 도입 검토