Apache Kafka 3.0.0发布


Apache Kafka社区宣布Apache Kafka 3.0的发布。Apache Kafka 3.0 是一个多方面的主要版本。Apache Kafka 3.0 引入了各种新功能、突破性的 API 更改以及对 KRaft 的改进——Apache Kafka 的内置共识机制将取代 Apache ZooKeeper 。
虽然 KRaft 尚未被推荐用于生产(已知差距列表),但我们对 KRaft 元数据和 API 进行了许多改进。Exactly-once 和分区重新分配支持值得强调。我们鼓励您查看 KRaft 的新功能并在开发环境中试用它。
从 Apache Kafka 3.0 开始,Producer 默认启用最强的交付保证 ( acks=all, enable.idempotence=true)。这意味着用户现在默认获得排序和持久性。
此外,不要错过 Kafka Connect 任务重启增强、Kafka Streams 基于时间戳同步的改进以及 MirrorMaker2 更灵活的配置选项。
 
主要变化

  • 在 3.0 中,Apache Kafka 项目的所有组件都已弃用对 Java 8 的支持。这将使用户有时间在下一个主要版本 (4.0) 之前进行调整,届时 Java 8 支持将被取消。
  • 对Scala 2.12 的支持在 Apache Kafka 3.0 中也已弃用。与 Java 8 一样,我们给用户时间来适应,因为计划在下一个主要版本 (4.0) 中删除对 Scala 2.12 的支持。
  • 在 3.0 中引入的一个主要功能是 KRaft 控制器和 KRaft Brokers 能够为名为 的元数据主题分区生成、复制和加载快照__cluster_metadata。Kafka 集群使用此主题来存储和复制有关集群的元数据信息,例如 Broker 配置、主题分区分配、领导等。随着此状态的增长,Kafka Raft Snapshot 提供了一种有效的方式来存储、加载和复制此信息.
  • 自 Kafka Raft Controller 的第一个版本以来的经验和持续开发表明,需要修改一些元数据记录类型,当 Kafka 配置为在没有 ZooKeeper (ZK) 的情况下运行时使用这些记录类型。
  • 从 3.0 开始,Kafka Producer 默认开启幂等性和所有副本的交付确认。这使得默认情况下记录交付保证更强。
  • Kafka Consumer 的配置属性的默认值session.timeout.ms从 10 秒增加到 45 秒。这将允许消费者在默认情况下更好地适应瞬时网络故障,并避免在消费者似乎只是暂时离开组时连续重新平衡。
  • 请求 Kafka 消费者组的当前偏移量已经有一段时间了。但是获取多个消费者组的偏移量需要对每个组进行单独的请求。在 3.0 和KIP-709 中,fetch 和 AdminClient API 被扩展为支持在单个请求/响应中同时读取多个消费者组的偏移量。
  • 支持可以以有效方式同时应用于多个消费者组的操作在很大程度上取决于客户端有效发现这些组的协调者的能力。这通过KIP-699成为可能,它增加了对通过一个请求发现多个组的协调器的支持。Kafka 客户端已更新为在与支持此请求的新 Kafka 代理交谈时使用此优化。