본문 바로가기
카테고리 없음

kafka consumer deserialization 오류

by seeker00 2025. 3. 11.
  • spring 카프카에서는 직렬화, 역직렬화 시, 헤더에 클래스에 대한 정보를 담고 이를 활용해서 직렬화/역직렬화를 수행한다.
  • 그럼, 헤더를 사용하지 않도록 하면, 간단히 해결되는 문제 아닌가 해서, 아래 설정을 false 로 두어보았다.

spring.json.add.type.headers


spring:
  kafka:
    consumer:
      properties:
        spring.json.add.type.headers: false
  • 그러나, 다시 아래와 같은 오류가 발생한다.
    Caused by: java.lang.IllegalStateException: No type information in headers and no default type provided at org.springframework.util.Assert.state(Assert.java:79) ~[spring-core-6.2.3.jar:6.2.3] at org.springframework.kafka.support.serializer.JsonDeserializer.deserialize(JsonDeserializer.java:598) ~[spring-kafka-3.3.3.jar:3.3.3] at org.springframework.kafka.support.serializer.ErrorHandlingDeserializer.deserialize(ErrorHandlingDeserializer.java:215) ~[spring-kafka-3.3.3.jar:3.3.3] ... 17 common frames omitted
  • 조금 더 찾아보니, 헤더를 사용하지 않으려면 default value 를 지정해두고, 해당하는 클래스 형태로만 역직렬화를 수행하게 되는 것 같다.

spring.json.type.mapping

  • 아래와 같이 yml 에 추가해서 매핑을 수행할 수 있다.
properties: 
  spring.json.trusted.packages: me.study.order.* 
  spring.json.type.mapping: me.study.order.infrastructure.kafka.event.DecreaseStockEvent:me.study.product.infrastructure.kafka.event.DecreaseStockEvent

참고 자료: