Apache kafka 3.6.0 关键更新说明

半兽人 发表于: 2023-10-20   最后更新时间: 2023-10-20 00:24:29  
{{totalSubscript}} 订阅, 1,027 游览

2023年10月10日,Apache Kafka 3.6.0 发布。此版本包含许多新功能和改进。这篇博文将重点介绍一些更突出的功能。有关更改的完整列表,请务必查看发布说明

将 Kafka 集群从 ZooKeeper 元数据系统迁移到 KRaft 元数据系统的功能现已可在生产环境中使用。详情请查看 ZooKeeper 到 KRaft 的迁移操作文档。注意,KRaft 群集仍不支持 JBOD,因此无法迁移使用 JBOD 的群集。

3.6 中完成了对 KRaft 中委托令牌(KAFKA-15219)的支持,进一步缩小了基于 ZooKeeper 的 Kafka 群集与 KRaft 之间的功能差距。从 ZooKeeper 到 KRaft 的授权令牌迁移也包含在 3.6 中。

分层存储是一项早期访问功能。它目前只适合在非生产环境中进行测试。

注意:ZooKeeper 自 3.5.0 版起已被标记为弃用。计划在 Apache Kafka 4.0 中移除 ZooKeeper。

Kafka Broker, Controller, 生产者, 消费者 和 Admin Client

  • KIP-405: Kafka 分层存储(早期访问):
    将分层存储引入 Kafka。注意,这是一项早期访问功能,仅建议在非生产环境中使用。该功能在 Kafka 中为可插拔的存储分层原生提供了计算和存储分离的代理分层存储功能,从而以最小的操作变化将存储无缝扩展到远程对象。

  • KIP-890:事务服务器端防御(第 1 部分):
    挂起的事务会对已读已提交的消费者产生负面影响,并妨碍压缩日志。KIP-890 可通过验证分区添加来帮助解决挂起事务的问题。KIP-890 的第 2 部分将优化验证,目前验证需要额外增加一跳。
    在 3.6.0 中,事务验证将防止数据分区上的事务挂起。在下一个版本中,还将涵盖事务偏移提交。

  • KIP-797:接受 IPv4/IPv6 端口上的重复监听器:
    到目前为止,Kafka 还不支持同一端口上的重复监听器。这在仅使用单个 IP 栈时有效,但如果同时使用 IPv4 和 IPv6,就会出现问题。有了 KIP-797,可以在不同的 IP 栈上为代理配置具有相同端口的监听器。此更新不会影响已发布广告的监听,因为它们已具备此功能。

  • KIP-863: 减少 CompletedFetch#parseRecord() 内存拷贝:
    通过使用 ByteBuffer 而不是 byte[] 进行反序列化,减少了内存分配并提高了记录反序列化过程中的内存性能,从而提高了效率。更新的公共接口包括 Deserializer 类、ByteBufferDeserializer 类和 StringDeserializer 类。

  • KIP-868: 元数据事务:

    通过添加由以下内容组成的元数据事务,提高了 KRaft 层的整体耐用性:

    • 开始事务
    • 记录数
    • 结束事务或中止事务

    KRaft 使用记录批次作为原子性机制。通常情况下,Raft 共识层的获取大小是有限制的,控制器可以生成一组超过此限制的原子记录。本次更新引入了标记记录,允许将更大的原子记录集分多批发送到 Raft 共识层。这样就绕过了获取限制。

  • KIP-902: 将 Zookeeper 升级至 3.8.2:
    将与 Kafka 捆绑的 ZooKeeper 版本升级到 3.8.2。新版本包含多项更新和安全改进。

  • KIP-917: 远程日志段的附加自定义元数据:
    它引入了可选的自定义元数据,作为远程日志段元数据的一部分。RemoteStorageManager 会在调用 copyLogSegmentData() 时返回可选的自定义元数据。它将与远程日志段元数据一起传递。

  • KIP-937: 改进消息时间戳验证:
    它通过为消息时间戳添加更多验证逻辑,提高了数据完整性,并防止了因时间戳处理不准确而造成的潜在隐患。在 Kafka 中,过去的时间戳是正常现象,而未来的时间戳可能代表格式不正确的整数。KIP-937 拒绝带有未来时间戳的报文,并提供了说明性的豁免。

  • KIP-938: 添加更多衡量 KRaft 性能的指标:
    添加新的控制器、加载器和快照发射器 KRaft 性能指标。

Kafka Streams

  • KIP-923: 为流表连接添加宽限期:
    为流表连接添加宽限期,以改进表侧失序数据处理。连接对象有一个名为 "withGracePeriod"的新方法,它将导致表侧查找仅在宽限期过后才发生。

  • KIP-941: 范围查询接受空下限和上限:
    以前,RangeQuery 不支持用 null 指定 "无上界/下界"。KIP-941 允许用户在 withRange(...) 中为下限/上限传递空值,以指定全开或半开范围:

    • withRange(null, null) == withNoBounds()
    • withRange(lower, null) == withLowerBound(lower)
    • withRange(null, upper) == withUpperBound(upper)

Kafka Connect

  • KIP-793: 允许将水槽连接器与topic突变 SMT 一起使用:
    为异步水槽连接器添加对主题突变 SMT 的支持。这是为了解决重载SinkTask::preCommit方法的水槽连接器与更改 SinkRecord 主题字段的 SMT 之间的不兼容问题。

  • KIP-875: Kafka Connect 中的一级偏移量支持:
    为 Kafka Connect 中的偏移量提供一流的管理支持。KIP-875 第 1 部分为连接器添加了获取偏移量的端点和新的 STOPPED 状态。更改偏移量和重置偏移量端点现已添加。

Action Description
GET /connectors/{connector}/offsets 读取连接器的偏移量;连接器必须存在
PATCH /connectors/{connector}/offsets 更改连接器的偏移量;连接器必须存在,且必须处于停止状态
DELETE /connectors/{connector}/offsets 重置连接器的偏移量;连接器必须存在,且必须处于停止状态
PUT /connectors/{connector}/pause 暂停连接器;连接器必须存在
  • Modernize Connect plugin discovery:
    借助 KIP-898,Connect woker 现在可以在启动期间直接读取 ServiceLoader 清单和模块信息,以实现更高效的插件类发现。请注意,此更新允许连接器开发人员向其插件添加服务声明。

REF

https://kafka.apache.org/blog#apache_kafka_360_release_announcement

更新于 2023-10-20

查看kafka更多相关的文章或提一个关于kafka的问题,也可以与我们一起分享文章