새로운 소식?(What’s new?)

3.0 이후 3.1의 새로운 기능(What’s New in 3.1 Since 3.0)

이 장에서는 버전 3.0에서 버전 3.1로 변경된 내용을 다룬다. 이전 버전의 변경 사항은 변경 내역을 참고하자.

카프카 클라이언트 버전(Kafka Client Version)

이 버전에는 3.5.1 kafka-clients가 필요하다.

임베디드카프카브로커(EmbeddedKafkaBroker)

이제 Zookeeper 대신 Kraft를 사용하기 위한 추가 구현체가 제공된다. 자세한 내용은 임베디드 Kafka 브로커를 참고하자.

JsonDeserializer

deserialization 예외가 발생할 경우, 더 이상 SerializationException 메시지는 대규모 데이터에서 장황해질 수 있고, 유용하지 않은 바이트 숫자 배열인 Can't deserialize data [[123, 34, 98, 97, 122, …​; 데이터를 포함하지 않는다. ErrorHandlingDeserializer와 함께 사용하는 경우 오류 핸들러로 전송된 DeserializationException에는 역직렬화할 수 없는 원시 데이터가 포함된 데이터 프로퍼티가 포함된다. ErrorHandlingDeserializer와 함께 사용하지 않으면 KafkaConsumer는 토픽/파티션/오프셋 및 Jackson이 던진 원인을 보여주는 동일한 레코드에 대해 계속해서 예외를 내보낸다.

ContainerPostProcessor

@KafkaListener 어노테이션에 ContainerPostProcessor의 빈을 지정하여 리스너 컨테이너에 후 처리(Post processing)를 적용할 수 있다. 이는 컨테이너가 생성된 후와 컨테이너 팩토리에 구성된 ContainerCustomizer가 구성된 후 발생한다. 자세한 내용은 컨테이너 팩토리를 참고하자.

ErrorHandlingDeserializer

이제 이 디시리얼라이저(deserializer)에 밸리데이터(Validator)를 추가할 수 있다. 대리자 Deserializer가 객체를 성공적으로 역직렬화 했지만 해당 객체가 유효성 검사에 실패하면 deserialization 예외가 발생하는 것과 유사한 예외가 발생한다. 이를 통해 원본 원시 데이터를 에러 핸들러로 전달할 수 있다. 자세한 내용은 ErrorHandlingDeserializer 사용을 참고하자.

Retryable Topics

@RetryableTopic(backoff = @Backoff(delay = 5000), attempts = "2", fixedDelayTopicStrategy = FixedDelayStrategy.SINGLE_TOPIC)인 경우 접미사 -retry-5000-retry로 변경한다. 접미사 -retry-5000을 유지하려면 @RetryableTopic(backoff = @Backoff(delay = 5000), attempts = "2")를 사용하자. 자세한 내용은 토픽명을 참고하자.

Listener Container Changes

null 소비자 group.id를 사용하여 파티션을 수동으로 할당하면, 이제 AckMode가 자동으로 MANUAL로 강제 변환된다. 자세한 내용은 수동으로 모든 파티션 할당을 참고하자.