|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 Spring for Apache Kafka 4.0.0! |
有什么新鲜事?
4.0自3.3以来的新内容
本节介绍了从3.3版本到4.0版本所做的更改。 关于早期版本的变更,请参见变更历史。
Apache Kafka 4.0 客户端升级
Apache Kafka 版 Spring 已升级为使用 Apache Kafka 客户端版本4.0.0.
此次升级带来了若干重要变化:
-
随着Kafka 4.0完全过渡到KRaft模式,所有基于ZooKeeper的功能都被移除了
-
ZooKeeper 的依赖已被移除
-
嵌入式 Kafka 测试框架现仅使用 KRaft 模式
-
这
EmbeddedKafkaZKBroker类已被移除,所有功能现在由嵌入KafkaKraftBroker
嵌入式Kafka测试框架变更
测试基础设施进行了重大更新:
-
这
嵌入卡夫卡规则JUnit 4 规则已被移除 -
这
@EmbeddedKafka通过移除与ZooKeeper相关的属性,注释得到了简化: -
这
牛皮纸属性已被移除,KRaft 模式现为唯一选项 -
ZooKeeper专用属性,如
动物园守护港,zkConnectionTimeout和zkSessionTimeout已被移除 -
KafkaClusterTestKit 导入现在使用 KRaft 模式的新包
-
一些测试已更新,以解决KRaft模式下静态端口分配的限制
-
测试中对复制因子进行了调整以适应KRaft的要求
Kafka Streams API 变更
-
KafkaStreamBrancher已更新以使用新的分裂()和分支()方法代替已弃用的分支()方法 -
这
DeserializationExceptionHandler已更新以使用新的ErrorHandlerContext
与Apache Kafka 4.0.0相关的内部API更新
-
这
经纪地址类现在使用org.apache.kafka.server.network.BrokerEndPoint而不是被弃用的kafka.cluster.BrokerEndPoint -
这
GlobalEmbeddedKafkaTestExecutionListener已更新为仅支持KRaft模式
新的消费者再平衡协议
Apache Kafka 4.0 版 Spring 支持 Kafka 4.0 的新消费者再平衡协议 - KIP-848。 详情请参见新的消费者再平衡协议文档。
支持多值头部
这JsonKafkaHeaderMapper和SimpleKafkaHeaderMapper支持Kafka记录的多值头部映射。
更多细节可见支持多值头部映射。
配置更多记录拦截者
监听器容器现在支持通过以下方式进行拦截器定制getRecordInterceptor().
详情请参见“消息监听器容器”部分。
批量听众中的每记录观察
现在可以使用批量监听器,为每条记录获得一个观测值。 更多信息请参见“批处理监听器的可观察性”。
Kafka 队列(共享消费者)支持
Spring for Apache Kafka 现已通过共享消费者提供 Kafka 队列的抢先体验支持,共享消费者是 Apache Kafka 4.0.0 的一部分,并实现了 KIP-932。 这使得多个消费者可以同时从同一分区消费,从而实现了协作式消费,从而比传统用户组提供更好的负载分布。 更多信息请参见 Kafka 队列(共享消费者)。
Jackson3号支持组
Spring for Apache Kafka 现已全面支持 Jackson 3,同时支持现有的 Jackson 2。 Jackson 3 在可用时自动被检测并优先使用,提供更强的性能和现代化的 JSON 处理能力。
所有Jackson 2级现均有Jackson 3的对应机型,名称一致且类型安全性能有所提升:
-
JsonKafkaHeaderMapper取代DefaultKafkaHeaderMapper -
JacksonJsonSerializer/Deserializer取代JsonSerializer/Deserializer -
JacksonJsonSerde取代JsonSerde -
JacksonJsonMessageConverter家族替代JsonMessageConverter家庭 -
Jackson投影消息转换器取代投影消息转换器 -
DefaultJacksonJavaTypeMapper取代DefaultJackson2JavaTypeMapper
新的Jackson3级车型使用JsonMapper而不是通用对象映射器以增强类型安全,并利用Jackson 3改进的模块系统和性能优化。
迁移路径:现有应用在 Jackson 2 上依然保持不变。 要迁移到 Jackson 3,只需将 Jackson 3 添加到你的类路径中,并更新类引用以使用新的 Jackson 3 对应版本。 当两个版本同时存在时,框架会自动检测并优先选择 Jackson 3。
向后兼容性:所有Jackson 2类均已弃用,但仍完全正常。 它们将在未来的主要版本中被移除。
有关配置示例,请参见串行化、反序列化和消息转换。
春季重试依赖移除
Spring for Apache Kafka 取消了对 Spring Retry 的依赖,转而采用 Spring Framework 7 引入的核心重试支持。 这是一个影响整个框架重试配置和 API 的重大变更。
BackOffValuesGenerator这会产生所需的退避前置价值观,现在直接与 Spring Framework 合作退避接口代替退避政策.
这些数值随后由听众基础设施管理,Spring Retry不再参与其中。
从配置角度看,春季卡夫卡大量依赖春季重试的@Backoff注解。
由于 Spring Framework 中没有对应的注释,注释被移至 Spring Kafka 中,表示为@BackOff并有以下改进:
-
统一命名:用途
@BackOff而不是@Backoff为了保持一致性 -
表达式评估:所有字符串属性都支持 SpEL 表达式和属性占位符
-
时长格式支持:字符串属性接受
java.util.Duration格式(例如,“2秒”、“500毫秒”) -
文档增强:改进的Javadoc,解释更清晰
迁移示例:
// 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作为输入。
这包含抛出的异常以及重试次数:
// Before
retryingDeserializer.setRecoveryCallback(context -> {
return fallbackValue;
});
// After
retryingDeserializer.setRecoveryCallback(retryException -> {
return fallbackValue;
});
的使用二进制异常分类器已被新引入的例外匹配器,提供一个完善的API。
其他变化包括:
-
目的地 主题 房产工厂使用例外匹配器而不是二进制异常分类器 -
这
uniform随机后退方法重试主题配置构建器已被弃用,转而支持抖动 -
错误处理工具已更新以支持新的异常匹配系统
-
Kafka Streams 重试模板现在使用 Spring Framework 的重试支持
应用程序必须更新配置以使用新的 Spring Framework 重试 API,但重试行为和功能保持不变。