Summary 잘못된 형식의 데이터(Poison Pill)가 들어왔을 때, 컨슈머 전체가 마비되는 현상을 방지하기 위해 ErrorHandlingDeserializer를 도입했습니다.
Producer가 실수로 JSON 형식이 아닌 데이터나, 약속된 DTO와 다른 타입의 데이터를 보냈다고 가정해 봅시다.
JacksonJsonDeserializer 직접 사용)
SerializationException이 발생합니다.@KafkaListener)에 도달하기도 전에 발생하므로, 에러 핸들러가 이를 잡지 못합니다.Spring Kafka는 이런 상황을 막기 위해 **ErrorHandlingDeserializer**라는 안전장치를 제공합니다.
application.yml에 다음과 같이 적용되었습니다. Key는 에러 확률이 낮아 그대로 두고, **Value(JSON)**에만 안전장치를 적용했습니다.
spring:
kafka:
consumer:
# [안전장치 적용]
# 직접 Jackson을 쓰지 않고, ErrorHandlingDeserializer를 메인으로 설정
value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer
properties:
# [위임 설정]
# "실제로 JSON 변환을 수행할 일꾼(Delegate)은 Jackson입니다"라고 등록
spring.deserializer.value.delegate.class: org.springframework.kafka.support.serializer.JacksonJsonDeserializer
참고: https://velog.io/@kshired/Spring-Kafka-ErrorHandlingDeserializer