|
对于最新稳定版本,请使用Spring for Apache Kafka 4.0.4! |
什么是新内容?
最新更新 in 3.2 自 3.1 起
此部分涵盖了从版本 3.1 到版本 3.2 的更改。 早期版本的更改,请参见 变更历史。
Kafka 客户端版本
该版本要求 3.7.0 kafka-clients。
3.7.0 版本的 Kafka 客户端引入了新的消费者组协议。
有关详细信息及其限制,请参见 KIP-848。
新的消费者组协议是一个早期访问版本,不建议用于生产环境。
在本版本中仅建议用于测试目的。
因此,Spring for Apache Kafka 仅在与 kafka-client 本身提供的测试级别支持范围内支持此新的消费者组协议。
默认情况下,Spring for Apache Kafka 使用经典的消费者组协议;在测试新的消费者组协议时,需要通过 group.protocol 属性进行启用。
测试支持变更
kraft 模式在 EmbeddedKafka 中默认被禁用,用户想要使用 kraft 模式必须启用它。
这是因为在 EmbeddedKafka 的 kraft 模式下观察到某些不稳定性,尤其是在测试新的消费者组协议时。
新的消费者组协议仅支持在 kraft 模式下,因此在测试新协议时,必须针对真实的 Kafka 集群,而不是基于 KafkaClusterTestKit 的那个,EmbeddedKafka 也是基于此。
此外,还观察到了一些在 KafkaListener 方法使用 EmbeddedKafka 的 kraft 模式时的竞态条件。
在这些问题解决之前,kraft 在 EmbeddedKafka 上的默认值将保持为 false。
Kafka Streams 交互式查询支持
一个新的API KafkaStreamsInteractiveQuerySupport,用于访问Kafka Streams交互查询中使用的可查询存储。
查看 Kafka Streams交互支持 了解更多信息。
交易ID后缀策略
新增了 TransactionIdSuffixStrategy 接口用于管理 transactional.id 后缀。
默认实现为 DefaultTransactionIdSuffixStrategy,当设置 maxCache 大于零时,可以在特定范围内复用 transactional.id,否则将通过递增计数器动态生成后缀。
有关更多信息,请参见 Fixed TransactionIdSuffix。
异步 @KafkaListener 返回
@KafkaListener(以及 @KafkaHandler)方法现在可以返回异步返回类型,包括 CompletableFuture<?>、Mono<?> 和 Kotlin 的 suspend 函数。
请参阅 异步返回 以获取更多信息。
基于抛出的异常将消息路由到自定义DLTs
现在可以在消息处理过程中根据抛出的异常类型将消息重定向到自定义死信队列(DLT)。
重定向规则可以通过RetryableTopic.exceptionBasedDltRouting或RetryTopicConfigurationBuilder.dltRoutingRules设置。
自定义死信队列以及其他重试和死信主题也会自动创建。
有关更多信息,请参阅基于抛出的异常将消息路由到自定义死信队列。
容器属性transactionManager属性弃用
transactionManager 属性在 ContainerProperties 中已被弃用,建议使用 KafkaAwareTransactionManager ,这是一个比通用的 PlatformTransactionManager 更窄的类型。参见 ContainerProperties 和 事务同步。
回滚处理后
一个新的AfterRollbackProcessor API processBatch 提供了。
请参阅 回滚处理器 以获取更多信息。
更改 @RetryableTopic 同一时隔策略默认值
将@RetryableTopic属性SameIntervalTopicReuseStrategy的默认值更改为SINGLE_TOPIC。
参见单主题最大间隔指数延迟.
非阻塞重试支持类级别@KafkaListener
非阻塞重试支持 @KafkaListener 在类上。 请参见 非阻塞重试.
在RetryTopicConfigurationProvider中对一个类应用@RetryableTopic过程。
提供新的公共API以查找RetryTopicConfiguration。
见Find RetryTopicConfiguration
RetryTopicConfigurer 支持处理 MultiMethodKafkaListenerEndpoint。
The RetryTopicConfigurer支持过程和注册MultiMethodKafkaListenerEndpoint。
The MultiMethodKafkaListenerEndpoint为属性defaultMethod和methods提供getter/setter。
修改仅适用于MethodKafkaListenerEndpoint类型的EndpointCustomizer。
The EndpointHandlerMethod添加新构造函数以构建提供的bean实例。
提供新的类EndpointHandlerMultiMethod来处理多方法重试端点。
基于用户提供的函数寻求到一个偏移的新API方法
ConsumerCallback 提供了一种新的API,可以根据用户定义的函数定位到指定偏移量,该函数将消费者的当前偏移量作为参数。
更多信息,请参阅 Seek API 文档。
@PartitionOffset 支持 SeekPosition
添加了seekPosition属性到@PartitionOffset对TopicPartitionOffset.SeekPosition的支持。更多细节请参见手动分配。
新的 `TopicPartitionOffset` 构造函数接受一个计算要跳转的偏移量的功能参数
TopicPartitionOffset现在有一个新的构造函数,该构造函数接受一个用户提供的函数来计算跳转到的位置。
当使用此构造函数时,框架会用当前消费者偏移位置作为输入参数调用该函数。
有关更多详细信息,请参见Seek API 文档。
Spring Boot应用名称作为默认客户端ID前缀
对于定义了应用程序名称的Spring Boot应用,该名称现在被用作某些客户端类型自动生成客户端ID的默认前缀。 请参见默认客户端ID前缀以获取更多信息。
增强的消息监听容器检索
ListenerContainerRegistry 提供了两个新的 API 动态查找和过滤 MessageListenerContainer 实例。getListenerContainersMatching(Predicate<String> idMatcher) 用于按 ID 进行筛选,另一个是 getListenerContainersMatching(BiPredicate<String, MessageListenerContainer> matcher) 用于按 ID 和容器属性进行筛选。
见 @KafkaListener 生命周期管理的API文档 获取更多信息。
增强观察通过提供更多的跟踪标签
KafkaTemplateObservation 提供了更多的跟踪标签(低基数)。
KafkaListenerObservation 提供了一个新的 API 以查找高基数键名称以及更多跟踪标签(高或低基数)。请参见 Micrometer 观测