该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 Spring for Apache Kafka 4.0.0spring-doc.cadn.net.cn

有什么新鲜事?

4.0自3.3以来的新内容

本节介绍了从3.3版本到4.0版本所做的更改。 关于早期版本的变更,请参见变更历史spring-doc.cadn.net.cn

Apache Kafka 4.0 客户端升级

Apache Kafka 版 Spring 已升级为使用 Apache Kafka 客户端版本4.0.0. 此次升级带来了若干重要变化:spring-doc.cadn.net.cn

嵌入式Kafka测试框架变更

测试基础设施进行了重大更新:spring-doc.cadn.net.cn

ConsumerRecords 构建器变更

消费者唱片构建器现在需要额外的地图参数,该框架已贯穿整个框架。 直接使用该构造函数的应用程序需要更新代码。spring-doc.cadn.net.cn

生产者界面更新

Kafka Producer 接口中已实现了新的方法:spring-doc.cadn.net.cn

已移除的弃用功能

若干弃用项目已被移除:spring-doc.cadn.net.cn

Kafka Streams API 变更

  • KafkaStreamBrancher已更新以使用新的分裂()分支()方法代替已弃用的分支()方法spring-doc.cadn.net.cn

  • DeserializationExceptionHandler已更新以使用新的ErrorHandlerContextspring-doc.cadn.net.cn

与Apache Kafka 4.0.0相关的内部API更新

  • 经纪地址类现在使用org.apache.kafka.server.network.BrokerEndPoint而不是被弃用的kafka.cluster.BrokerEndPointspring-doc.cadn.net.cn

  • GlobalEmbeddedKafkaTestExecutionListener已更新为仅支持KRaft模式spring-doc.cadn.net.cn

新的消费者再平衡协议

Apache Kafka 4.0 版 Spring 支持 Kafka 4.0 的新消费者再平衡协议 - KIP-848。 详情请参见新的消费者再平衡协议文档spring-doc.cadn.net.cn

支持多值头部

JsonKafkaHeaderMapperSimpleKafkaHeaderMapper支持Kafka记录的多值头部映射。 更多细节可见支持多值头部映射spring-doc.cadn.net.cn

配置更多记录拦截者

监听器容器现在支持通过以下方式进行拦截器定制getRecordInterceptor(). 详情请参见“消息监听器容器”部分。spring-doc.cadn.net.cn

批量听众中的每记录观察

现在可以使用批量监听器,为每条记录获得一个观测值。 更多信息请参见“批处理监听器的可观察性”。spring-doc.cadn.net.cn

Kafka 队列(共享消费者)支持

Spring for Apache Kafka 现已通过共享消费者提供 Kafka 队列的抢先体验支持,共享消费者是 Apache Kafka 4.0.0 的一部分,并实现了 KIP-932。 这使得多个消费者可以同时从同一分区消费,从而实现了协作式消费,从而比传统用户组提供更好的负载分布。 更多信息请参见 Kafka 队列(共享消费者)。spring-doc.cadn.net.cn

Jackson3号支持组

Spring for Apache Kafka 现已全面支持 Jackson 3,同时支持现有的 Jackson 2。 Jackson 3 在可用时自动被检测并优先使用,提供更强的性能和现代化的 JSON 处理能力。spring-doc.cadn.net.cn

所有Jackson 2级现均有Jackson 3的对应机型,名称一致且类型安全性能有所提升:spring-doc.cadn.net.cn

新的Jackson3级车型使用JsonMapper而不是通用对象映射器以增强类型安全,并利用Jackson 3改进的模块系统和性能优化。spring-doc.cadn.net.cn

迁移路径:现有应用在 Jackson 2 上依然保持不变。 要迁移到 Jackson 3,只需将 Jackson 3 添加到你的类路径中,并更新类引用以使用新的 Jackson 3 对应版本。 当两个版本同时存在时,框架会自动检测并优先选择 Jackson 3。spring-doc.cadn.net.cn

向后兼容性:所有Jackson 2类均已弃用,但仍完全正常。 它们将在未来的主要版本中被移除。spring-doc.cadn.net.cn

春季重试依赖移除

Spring for Apache Kafka 取消了对 Spring Retry 的依赖,转而采用 Spring Framework 7 引入的核心重试支持。 这是一个影响整个框架重试配置和 API 的重大变更。spring-doc.cadn.net.cn

BackOffValuesGenerator这会产生所需的退避前置价值观,现在直接与 Spring Framework 合作退避接口代替退避政策. 这些数值随后由听众基础设施管理,Spring Retry不再参与其中。spring-doc.cadn.net.cn

从配置角度看,春季卡夫卡大量依赖春季重试的@Backoff注解。 由于 Spring Framework 中没有对应的注释,注释被移至 Spring Kafka 中,表示为@BackOff并有以下改进:spring-doc.cadn.net.cn

迁移示例:spring-doc.cadn.net.cn

// Before
@RetryableTopic(backoff = @Backoff(delay = 2000, maxDelay = 10000, multiplier = 2))

// After
@RetryableTopic(backOff = @BackOff(delay = 2000, maxDelay = 10000, multiplier = 2))

// With new duration format support
@RetryableTopic(backOff = @BackOff(delayString = "2s", maxDelayString = "10s", multiplier = 2))

// With property placeholders
@RetryableTopic(backOff = @BackOff(delayString = "${retry.delay}", multiplierString = "${retry.multiplier}"))

RetryingDeserializer不再提供恢复回调但有一个等价的函数,使得RetryException作为输入。 这包含抛出的异常以及重试次数:spring-doc.cadn.net.cn

// Before
retryingDeserializer.setRecoveryCallback(context -> {
    return fallbackValue;
});

// After
retryingDeserializer.setRecoveryCallback(retryException -> {
    return fallbackValue;
});

的使用二进制异常分类器已被新引入的例外匹配器,提供一个完善的API。spring-doc.cadn.net.cn

其他变化包括:spring-doc.cadn.net.cn

应用程序必须更新配置以使用新的 Spring Framework 重试 API,但重试行为和功能保持不变。spring-doc.cadn.net.cn