1. What’s New in 2.7 Since 2.6

This section covers the changes made from version 2.5 to version 2.6. For changes in earlier version, see [history].

1.1. Kafka Client Version

This version requires the 2.7.0 kafka-clients.

1.2. Listener Container Changes

The onlyLogRecordMetadata container property is now true by default.

A new container property stopImmediate is now available.

See [container-props] for more information.

Error handlers that use a BackOff between delivery attempts (e.g. SeekToCurrentErrorHandler and DefaultAfterRollbackProcessor) will now exit the back off interval soon after the container is stopped, rather than delaying the stop. See [after-rollback] and [seek-to-current] for more information.

Error handlers and after rollback processors that extend FailedRecordProcessor can now be configured with one or more RetryListener s to receive information about retry and recovery progress.

See See [after-rollback], [seek-to-current], and [recovering-batch-eh] for more information.

The RecordInterceptor now has additional methods called after the listener returns (normally, or by throwing an exception). In addition, there is now a BatchInterceptor for batch listeners. See [message-listener-container] for more information.

1.3. @KafkaListener Changes

You can now validate the payload parameter of @KafkaHandler methods (class-level listeners). See [kafka-validation] for more information.

1.4. DeadLetterPublishingRecover Changes

Now, if both the key and value fail deserialization, the original values are published to the DLT. Previously, the value was populated but the key DeserializationException remained in the headers. There is a breaking API change, if you subclassed the recoverer and overrode the createProducerRecord method.

In addition, the recoverer verifies that the partition selected by the destination resolver actually exists before publishing to it.

See [dead-letters] for more information.

1.5. ChainedKafkaTransactionManager is Deprecated

See [transactions] for more information.