새로운 소식?(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
로 강제 변환된다. 자세한 내용은 수동으로 모든 파티션 할당을 참고하자.