此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring for Apache Kafka 3.3.9! |
什么是新的?
4.0 自 3.3 以来的新增功能
本节介绍从 3.3 版到 4.0 版所做的更改。 有关早期版本中的更改,请参阅更改历史记录。
Apache Kafka 4.0 客户端升级
Spring for Apache Kafka 已升级为使用 Apache Kafka 客户端版本4.0.0
.
此次升级带来了几个重要的变化:
-
随着 Kafka 4.0 完全过渡到 KRaft 模式,所有基于 ZooKeeper 的功能都已被删除
-
ZooKeeper 依赖项已从项目中删除
-
嵌入式 Kafka 测试框架现在专门使用 KRaft 模式
-
这
EmbeddedKafkaZKBroker
类已被删除,所有功能现在都由EmbeddedKafkaKraftBroker
嵌入式 Kafka 测试框架更改
测试基础设施已大幅更新:
-
这
EmbeddedKafkaRule
JUnit 4 规则已被删除 -
这
@EmbeddedKafka
通过删除与 ZooKeeper 相关的属性,注释已得到简化: -
这
kraft
属性已被删除,因为 KRaft 模式现在是唯一的选项 -
特定于 ZooKeeper 的属性,例如
zookeeperPort
,zkConnectionTimeout
和zkSessionTimeout
已被删除 -
KafkaClusterTestKit 导入现在使用 KRaft 模式的新包
-
一些测试已更新,以解决 KRaft 模式下静态端口分配的限制
-
对测试中的复制因子进行了调整,以适应 KRaft 要求
已删除已弃用的功能
已删除几个已弃用的项目:
-
已弃用的
partitioner
已从运行时提示中删除类 -
已弃用的
sendOffsetsToTransaction
使用String consumerGroupId
已被删除
Kafka Streams API 更改
-
KafkaStreamBrancher
已更新为使用新的split()
和branch()
方法而不是已弃用的branch()
方法 -
这
DeserializationExceptionHandler
已更新为使用新的ErrorHandlerContext
Apache Kafka 4.0.0 相关的内部 API 更新
-
这
BrokerAddress
类现在使用org.apache.kafka.server.network.BrokerEndPoint
而不是已弃用的kafka.cluster.BrokerEndPoint
-
这
GlobalEmbeddedKafkaTestExecutionListener
已更新为仅适用于 KRaft 模式
新的消费者再平衡协议
Spring for Apache Kafka 4.0 支持 Kafka 4.0 的新消费者再平衡协议 - KIP-848。 有关详细信息,请参阅新的消费者再平衡协议文档。
支持多值标头
这JsonKafkaHeaderMapper
和SimpleKafkaHeaderMapper
支持 Kafka 记录的多值头映射。
更多详细信息,请参阅支持多值标头映射。
配置其他RecordInterceptor
侦听器容器现在支持通过以下方式自定义拦截器getRecordInterceptor()
.
有关详细信息,请参阅消息侦听器容器部分。
批量侦听器中的每条记录观察
现在,使用批处理侦听器时,可以获取每条记录的观察结果。 有关更多信息,请参阅批处理侦听器的可观测性。
Kafka 队列(共享消费者)支持
Spring for Apache Kafka 现在通过共享消费者为 Kafka 队列提供早期访问支持,共享消费者是 Apache Kafka 4.0.0 的一部分并实现了 KIP-932。 这使得多个消费者可以同时从同一分区消费的协作消费成为可能,与传统消费者组相比,提供更好的负载分配。 有关更多信息,请参阅 Kafka 队列(共享消费者)。
Jackson 3 支持
Spring for Apache Kafka 现在除了现有的 Jackson 2 支持外,还提供了对 Jackson 3 的全面支持。 Jackson 3 会自动检测并在可用时进行首选,从而提供增强的性能和现代 JSON 处理功能。
所有Jackson 2 级现在都有Jackson 3 级,具有一致的命名和改进的类型安全性:
-
JsonKafkaHeaderMapper
取代DefaultKafkaHeaderMapper
-
JacksonJsonSerializer/Deserializer
取代JsonSerializer/Deserializer
-
JacksonJsonSerde
取代JsonSerde
-
JacksonJsonMessageConverter
家庭替换JsonMessageConverter
家庭 -
JacksonProjectingMessageConverter
取代ProjectingMessageConverter
-
DefaultJacksonJavaTypeMapper
取代DefaultJackson2JavaTypeMapper
新的Jackson 3 类使用JsonMapper
而不是通用ObjectMapper
以增强类型安全性,并利用Jackson 3 改进的模块系统和性能优化。
迁移路径:现有应用程序在 Jackson 2 中继续保持不变。 要迁移到 Jackson 3,只需将 Jackson 3 添加到您的类路径中并更新类引用以使用新的 Jackson 3 等效项。 当两个版本都存在时,框架会自动检测并首选 Jackson 3。
向后兼容性:所有 Jackson 2 类均已弃用,但仍能正常运行。 它们将在将来的主要版本中被删除。
有关配置示例,请参阅序列化、反序列化和消息转换。