Apache Kafka 3.2.3 与 3.9.1 版本差异详细对比

目录标题

  • Apache Kafka 3.2.3 与 3.9.1 版本差异详细对比
    • 一、版本概述
      • 1.1 基本信息
      • 1.2 发布时间线
    • 二、架构层面的重大变化
      • 2.1 KRaft 模式演进 (最重大变化)
      • 2.2 ZooKeeper 淘汰计划
    • 三、核心功能新增与改进
      • 3.1 分层存储 (Tiered Storage)
      • 3.2 消费者再平衡协议
      • 3.3 镜像复制增强 (MirrorMaker 2.0)
      • 3.4 压缩支持增强
      • 3.5 机架感知分配
    • 四、Kafka Streams 重大改进
      • 4.1 状态存储增强
      • 4.2 异常处理改进
      • 4.3 交互式查询 v2 (IQv2) 增强
      • 4.4 其他 Streams 改进
    • 五、Kafka Connect 增强功能
      • 5.1 REST API 改进
      • 5.2 转换增强
      • 5.3 运维改进
    • 六、监控与可观测性
      • 6.1 客户端指标
      • 6.2 JMX 指标增强
      • 6.3 分层存储指标
    • 七、安全与认证改进
      • 7.1 SCRAM 支持
      • 7.2 证书管理
      • 7.3 ACL 改进
      • 7.4 安全修复
    • 八、配置与部署改进
      • 8.1 Docker 支持
      • 8.2 配置提供者
      • 8.3 其他配置改进
    • 九、性能与可靠性改进
      • 9.1 性能优化
      • 9.2 可靠性增强
      • 9.3 Bug 修复
    • 十、API 变更与兼容性
      • 10.1 废弃的 API
      • 10.2 新增 API
      • 10.3 恢复的 API
    • 十一、Java 版本支持变化
    • 十二、升级路径建议
      • 12.1 从 3.2.3 升级到 3.9.1 的推荐路径
      • 12.2 升级前检查清单
      • 12.3 关键配置变更
    • 十三、重要 KIP 索引
      • 13.1 架构相关
      • 13.2 分层存储
      • 13.3 Kafka Streams
      • 13.4 Kafka Connect
    • 十四、迁移注意事项
      • 14.1 ZooKeeper 到 KRaft 迁移
      • 14.2 Java 版本迁移
      • 14.3 分层存储迁移
    • 十五、已知问题与限制
      • 15.1 3.2.3 已知问题
      • 15.2 3.9.1 已知限制
      • 15.3 升级兼容性
    • 十六、总结与建议
      • 16.1 主要变化总结
      • 16.2 升级建议
      • 16.3 未来规划
    • 十七、参考资源
      • 官方文档
      • 官方博客
      • KIP 文档
      • 其他资源

Apache Kafka 3.2.3 与 3.9.1 版本差异详细对比

文档生成时间: 2026-01-15
调研范围: Apache Kafka 3.2.3 至 3.9.1 所有中间版本
数据来源: Apache Kafka 官方发布说明、Confluent 博客、官方文档


一、版本概述

1.1 基本信息

特性 Kafka 3.2.3 Kafka 3.9.1
发布日期 2022年8月 2025年5月
版本类型 Bug修复版本 Bug修复版本
基础版本 Kafka 3.2.x 系列 Kafka 3.9.x 系列
ZooKeeper 状态 必需依赖 已废弃 (将在4.0移除)
KRaft 状态 早期访问阶段 生产就绪
Java 支持 Java 8/11 Java 17/23 (Java 11 已废弃)
主要安全修复 CVE-2022-34917 多项安全增强

1.2 发布时间线

3.2.3 (2022-08) → 3.3.0 → 3.4.0 → 3.5.0 → 3.6.0 → 3.7.0 → 3.8.0 → 3.9.0 → 3.9.1 (2025-05)

二、架构层面的重大变化

2.1 KRaft 模式演进 (最重大变化)

特性 Kafka 3.2.3 Kafka 3.9.1
KRaft 状态 早期访问 (Early Access) 生产就绪 (Production Ready)
ZooKeeper 依赖 必需 完全可选,已标记为废弃
动态控制器仲裁 不支持 支持 (KIP-853)
JBOD 支持 不支持 支持 (生产就绪)
ZK 迁移工具 基础支持 完整支持 (最终版本)

关键里程碑版本:

  • 3.3.0: KRaft 模式标记为生产就绪 (KIP-833)
  • 3.4.0: 引入 ZK 到 KRaft 迁移工具 (KIP-866)
  • 3.5.0: ZooKeeper 正式标记为废弃
  • 3.7.0: JBOD 在 KRaft 中进入早期访问
  • 3.8.0: JBOD 在 KRaft 中生产就绪
  • 3.9.0: 动态 KRaft 仲裁成员管理 (KIP-853)

2.2 ZooKeeper 淘汰计划

3.5.0 开始: ZooKeeper 正式标记为废弃
3.9.0: 最后一个支持 ZooKeeper 的主要版本
4.0.0: ZooKeeper 将被完全移除

迁移路径建议:

# 从旧版本升级到 4.0 的示例路径
Kafka 1.03.4 → ZooKeeper 3.83.9 → 执行ZK迁移 → 4.0

三、核心功能新增与改进

3.1 分层存储 (Tiered Storage)

版本 功能状态
3.2.3 不支持
3.6.0 早期访问引入 (KIP-405)
3.7.0 新增监控指标 (KIP-963)
3.8.0 支持 JBOD 配置
3.9.0 生产就绪

3.9.0 新增功能:

  • KIP-950: 按主题动态禁用分层存储
  • KIP-956: 分层存储配额管理
  • KIP-1005: 暴露 EarliestLocalOffset 和 TieredOffset
  • KIP-1057: kafka-dump-log.sh 支持检查分层存储记录

3.2 消费者再平衡协议

版本 功能
3.2.3 传统再平衡协议
3.7.0 KIP-848 下一代协议 (早期访问)
3.8.0 KIP-848 预览版,多项 bug 修复
3.9.1 持续改进中

KIP-848 优势:

  • 将复杂性从消费者端移至 Group Coordinator
  • 完全重构为增量式协议
  • 不再依赖全局同步屏障
  • 更高效、更快速

3.3 镜像复制增强 (MirrorMaker 2.0)

版本 新增功能
3.4.0 KIP-787: MM2 管理资源的自定义 Admin 实现
3.5.0 KIP-710: 分布式模式完全支持
KIP-875: 原生 Offset 管理支持
KIP-894: 使用 IncrementalAlterConfig 同步配置
KAFKA-14021: 支持 Exactly-Once 语义
3.9.0 KIP-1031: MirrorSourceConnector 中控制 offset 转换

3.4 压缩支持增强

版本 功能
3.2.3 仅支持默认压缩级别
3.8.0 KIP-390: 支持自定义压缩级别配置

3.5 机架感知分配

版本 功能
3.4.0 引入协议变更 (KIP-881)
3.5.0 内置分配器完全支持机架感知
3.7.0 KIP-925: Kafka Streams 支持机架感知任务分配

四、Kafka Streams 重大改进

4.1 状态存储增强

功能 引入版本 描述
版本化状态存储 3.5.0 (KIP-889) 提高乱序记录连接的准确性
可共享状态存储 3.8.0 (KIP-813) 跨应用共享状态存储数据
自定义任务分配 3.8.0 (KIP-924) 可插拔的自定义任务分配器

4.2 异常处理改进

版本 功能
3.5.0 KIP-399: ProductionExceptionHandler 扩展支持序列化异常
3.9.0 KIP-1033: 处理过程中发生的异常处理器
3.9.0 KIP-1049: 新增 log.summary.interval.ms 配置

4.3 交互式查询 v2 (IQv2) 增强

版本 功能
3.7.0 KIP-960/968: 版本化状态存储的 IQ 支持
KIP-985: reverseRange 和 reverseAll 查询
KIP-992: TimestampedKeyQuery 和 TimestampedRangeQuery

4.4 其他 Streams 改进

版本 功能
3.5.0 KIP-907: Boolean Serde 支持
3.7.0 KIP-954: 自定义存储类型的默认 DSL 配置
3.7.0 KIP-962: 放宽非空键要求
3.7.0 KIP-988: Streams Standby 更新监听器
3.8.0 KIP-989: 改进 StateStore Iterator 指标

五、Kafka Connect 增强功能

5.1 REST API 改进

版本 功能
3.5.0 KIP-875: Offset 管理的 REST API 端点
3.8.0 KIP-477: PATCH 方法支持部分配置更新
3.9.0 KIP-1017: 健康检查端点
3.9.0 KIP-970: 废弃冗余任务配置端点

5.2 转换增强

版本 功能
3.9.0 KIP-1040: InsertField、ExtractField 等转换中改进可空值处理

5.3 运维改进

版本 功能
3.7.0 KIP-976: 集群范围的动态日志调整
3.7.0 KIP-980: 允许以停止状态创建连接器
3.7.0 KIP-959: BooleanConverter 支持
3.8.0 KIP-1004: 强制执行 tasks.max 属性

六、监控与可观测性

6.1 客户端指标

版本 功能
3.7.0 KIP-714: 客户端指标和可观测性
3.7.0 KIP-1000: 客户端指标配置资源管理

6.2 JMX 指标增强

版本 功能
3.7.0 KIP-938: 新增 11 个 KRaft 性能指标
3.7.0 KIP-1001: 新增 CurrentControllerId 指标
3.8.0 KIP-1019: 暴露 isMeasurable() 方法
3.8.0 KIP-1036: 扩展 RecordDeserializationException

6.3 分层存储指标

版本 功能
3.7.0 KIP-963: 分层存储额外指标

七、安全与认证改进

7.1 SCRAM 支持

版本 功能
3.5.0 KIP-900: KRaft 中支持 Broker 间 SCRAM 认证

7.2 证书管理

版本 功能
3.7.0 KIP-978: 允许动态重载不同 DN/SAN 的证书

7.3 ACL 改进

版本 功能
3.9.1 KAFKA-18051: 禁止创建不包含冒号的 principal 的 ACL

7.4 安全修复

3.2.3 主要修复:

  • CVE-2022-34917 及其他 7 个安全问题

3.9.1 修复的安全问题:

  • KAFKA-17792: Header 解析超时和大量内存使用问题
  • KAFKA-18281: 非广播监听器的路由验证

八、配置与部署改进

8.1 Docker 支持

版本 功能
3.7.0 KIP-975: 官方 Apache Kafka Docker 镜像
3.8.0 KIP-974: 基于 GraalVM 的 Native Docker 镜像
3.8.0 KIP-1028: 官方 Docker 镜像

8.2 配置提供者

版本 功能
3.5.0 KIP-887: EnvVarConfigProvider 从环境变量获取配置
3.8.0 KIP-993: 限制文件和目录 ConfigProvider 访问的文件

8.3 其他配置改进

版本 功能
3.3.0 KIP-848: 新一代消费者再平衡协议
3.4.0 KIP-854: 更高效地清理 Producer ID
3.5.0 KIP-903: 具有 stale broker epoch 的副本不能加入 ISR
3.7.0 KIP-890: 事务服务端防御
3.8.0 KIP-899: 允许生产者和消费者重新引导
3.8.0 KIP-1018: 引入 max remote fetch timeout 配置
3.8.0 KIP-1037: WriteTxnMarkers API 支持 Alter Cluster 权限
3.8.0 KIP-1041: 废弃 offsets.commit.required.acks 配置

九、性能与可靠性改进

9.1 性能优化

版本 功能
3.3.0 改进的分区可扩展性
3.4.0 Producer ID 清理优化 (KIP-854)
3.7.0 KIP-951: 客户端 Leader 发现优化
3.7.0 KIP-580: 客户端指数退避重试

9.2 可靠性增强

版本 功能
3.5.0 KIP-903: 防止数据副本的 ISR 加入问题
3.7.0 KIP-858: KRaft 中 JBOD 磁盘故障处理
3.8.0 KIP-848: 下一代再平衡协议 (预览)
3.9.1 KAFKA-18326: 缓存存储可能返回已删除值的修复

9.3 Bug 修复

3.9.1 重要修复:

  • KAFKA-12679: 重平衡时目录活锁问题
  • KAFKA-15931: 分层存储读取中断时缓存事务索引关闭
  • KAFKA-16407/16434: ForeignKey INNER JOIN 问题
  • KAFKA-17299: Kafka Streams 消费者停止消费
  • KAFKA-17455: 客户端限流后的 TaskCorruptedException
  • KAFKA-17635: exactly_once_v2 事件丢失
  • KAFKA-18063: SnapshotRegistry 内存泄漏
  • KAFKA-18171: bootstrap.servers 行为变更
  • KAFKA-18263: 静态成员重新加入时的锁问题
  • KAFKA-18723: KRaft 处理损坏记录
  • KAFKA-18758: 关闭时的 NullPointerException
  • KAFKA-18943: Kafka Streams 在任务撤销期间错误提交事务

十、API 变更与兼容性

10.1 废弃的 API

API 版本 废弃版本 移除版本 说明
Kafka 2.1 之前的客户端 API 3.7.0 4.0.0 KIP-896
Log4J Appender 3.8.0 4.0.0 KIP-719
offsets.commit.required.acks 3.8.0 4.0.0 KIP-1041
Java 11 (Broker/Tools) 3.7.0 4.0.0 KIP-1013
kafka.serializer.Decoder 3.8.0 未来 KIP-1047

10.2 新增 API

版本 新增 API
3.5.0 EnvVarConfigProvider
3.7.0 客户端指标管理 API
3.8.0 PATCH 方法支持 (Connect REST)
3.9.0 动态 KRaft 仲裁管理 API
3.9.0 健康检查端点

10.3 恢复的 API

版本 功能
3.9.1 Produce v4-v6 取消废弃标记
3.9.1 Metadata v0-v3 取消废弃标记
3.9.1 DeleteGroups v0 取消废弃标记
3.9.1 SaslHandshake v0 和 FindCoordinator v0 取消废弃标记

十一、Java 版本支持变化

版本 最低 Java 推荐 Java 说明
3.2.3 Java 8 Java 11 完整支持
3.7.0 Java 11 Java 17 Java 8 不再支持
3.9.1 Java 11 Java 17/23 Java 11 已废弃 (4.0 移除)

3.9.1 新增:

  • Java 23 支持
  • JDK 23 编译器警告修复 (“this-escape” 警告)

十二、升级路径建议

12.1 从 3.2.3 升级到 3.9.1 的推荐路径

# 路径 1: 直接滚动升级
3.2.3 → 3.3.x → 3.4.x → 3.5.x → 3.6.x → 3.7.x → 3.8.x → 3.9.0 → 3.9.1
# 路径 2: 跨版本升级 (建议不超过 2 个小版本)
3.2.3 → 3.4.x → 3.6.x → 3.8.x → 3.9.1
# 路径 3: ZooKeeper 到 KRaft 迁移
3.2.3 (ZK模式)3.4.x → 3.9.x (ZK模式) → 执行 ZK 迁移 → KRaft 模式

12.2 升级前检查清单

  • 验证 Java 版本兼容性 (至少 Java 11,推荐 Java 17)
  • 检查废弃的 API 使用情况
  • 备份 ZooKeeper 数据 (如果仍在使用)
  • 检查自定义配置提供者兼容性
  • 验证第三方客户端兼容性
  • 准备 KRaft 迁移计划 (如果适用)
  • 测试环境充分验证

12.3 关键配置变更

配置项 变更
offsets.commit.required.acks 3.8.0 废弃,3.9.0 配置行为变更
inter.broker.protocol.version 升级后需要更新
log.message.format.version 升级后需要更新
zookeeper.connect KRaft 模式不再需要

十三、重要 KIP 索引

13.1 架构相关

KIP 版本 描述
KIP-500 3.0+ KRaft 元数据模式 (基础)
KIP-833 3.3.0 KRaft 生产就绪标记
KIP-848 3.7+ 下一代消费者再平衡协议
KIP-858 3.7.0 KRaft 中 JBOD 支持
KIP-853 3.9.0 动态 KRaft 仲裁成员管理

13.2 分层存储

KIP 版本 描述
KIP-405 3.6.0 分层存储基础 (早期访问)
KIP-950 3.9.0 分层存储禁用功能
KIP-956 3.9.0 分层存储配额
KIP-1005 3.9.0 暴露本地和远程偏移量
KIP-1057 3.9.0 日志工具远程元数据支持

13.3 Kafka Streams

KIP 版本 描述
KIP-889 3.5.0 版本化状态存储
KIP-813 3.8.0 可共享状态存储
KIP-924 3.8.0 可自定义任务分配
KIP-1033 3.9.0 处理异常处理器

13.4 Kafka Connect

KIP 版本 描述
KIP-710 3.5.0 MM2 分布式模式完整支持
KIP-875 3.5.0 Offset 管理原生支持
KIP-477 3.8.0 PATCH 方法支持
KIP-1017 3.9.0 健康检查端点

十四、迁移注意事项

14.1 ZooKeeper 到 KRaft 迁移

关键步骤:

  1. 升级到 Kafka 3.4+ (支持迁移工具)
  2. 如果版本 < 2.4,需要先升级到 3.4
  3. 升级 ZooKeeper 到 3.8+ (如果从旧版本迁移)
  4. 升级到 Kafka 3.9 (最佳迁移版本)
  5. 使用 kafka-migration.sh 执行迁移
  6. 验证迁移成功
  7. 停止 ZooKeeper

重要提示:

  • Kafka 3.9 是最后一个支持 ZooKeeper 的主要版本
  • Kafka 4.0 将完全移除 ZooKeeper 支持

14.2 Java 版本迁移

  • Kafka 3.7+: Broker 需要 Java 17+
  • 客户端: 仍可使用 Java 11+
  • 建议: 尽早迁移到 Java 17 或 Java 21

14.3 分层存储迁移

  • 从 3.6 开始引入 (早期访问)
  • 3.9 正式生产就绪
  • 需要配置外部存储 (如 S3、GCS)

十五、已知问题与限制

15.1 3.2.3 已知问题

  • KRaft 模式不稳定
  • 无分层存储
  • ZooKeeper 强依赖
  • 旧版再平衡协议效率低

15.2 3.9.1 已知限制

  • 静态元数据仲裁无法转换为动态仲裁
  • KIP-848 仍在预览阶段
  • 部分旧 API 即将移除 (4.0)

15.3 升级兼容性

兼容性
3.2.x 3.9.x 滚动升级支持
3.2.x 4.x 需要经过 3.9

十六、总结与建议

16.1 主要变化总结

  1. 架构层面: ZooKeeper 完全可选,KRaft 生产就绪
  2. 存储层面: 分层存储正式 GA
  3. 流处理: Kafka Streams 大幅增强
  4. 可观测性: 客户端指标和监控显著改进
  5. 安全性: 多项安全增强和修复
  6. 性能: 再平衡协议重构,性能大幅提升

16.2 升级建议

立即升级理由:

  • 安全修复 (CVE-2022-34917 等)
  • KRaft 生产就绪
  • 分层存储可用
  • 性能提升
  • ZooKeeper 即将移除

升级优先级:

  1. 高优先级: 仍在使用 ZooKeeper 的集群
  2. 中优先级: 需要 Java 17 支持的场景
  3. 低优先级: 已在 3.6+ 的稳定集群

16.3 未来规划

  • Kafka 4.0:

    • 完全移除 ZooKeeper
    • 移除 Java 11 支持
    • 移除旧版 API
  • 建议行动:

    • 在 2025 年前完成到 3.9.x 的升级
    • 规划 ZooKeeper 到 KRaft 的迁移
    • 准备 Java 17/21 升级

十七、参考资源

官方文档

  • Apache Kafka 官方网站
  • Kafka 3.9.1 Release Notes
  • Kafka 3.2.3 Release Notes

官方博客

  • Apache Kafka 3.9.0 Release Announcement
  • Apache Kafka 3.8.0 Release Announcement
  • Apache Kafka 3.7.0 Release Announcement
  • Introducing Apache Kafka 3.5.0

KIP 文档

  • Kafka Improvement Proposals

其他资源

  • Confluent Kafka 文档
  • Kafka 版本支持状态

文档维护: 本文档基于 Apache Kafka 官方发布说明整理,如有疑问请参考官方文档确认。

© 版权声明

相关文章