大家好,我是R哥。
Kafka 4.0 终于来了!
这次更新可不只是常规的版本优化,而是一次重大架构调整,尤其是不再支持 Java 8,彻底移除了 Zookeeper,正式启用 KRaft 模式,让 Kafka 变得更加独立、高效。
除了这个重磅更新外,Kafka 4.0 还砍掉了一些历史包袱,还带来几个重磅新功能,这次升级可谓是大刀阔斧,革新不断,让我们一起看看它的主要变化吧。
Kafka 4.0 主要新特性
1、正式移除 Zookeeper
说到 Kafka 4.0,第一个必须说的就是:Zookeeper,彻底移除了,这绝对是 Kafka 4.0 版本中最最最重磅的变化。
来看看旧模型和新模型的区别:
在 Kafka 早期架构中,Zookeeper 一直和 Kafka 深度绑定,负责保存 Kafka 的元数据、节点状态、选举控制器等核心功能。
虽然 Zookeeper 也是非常主流的分布式中间件,但对于讲究性能的 Kafka 来说越来越成为了累赘,比如 Kafka 需要额外维护一个 Zookeeper 集群,这就增加了管理和维护成本,扩展性也受限,影响性能。
所以 Kafka 前几年就弄出来了KRaft 模式,把 Kafka 的元数据从 Zookeeper 搬到了 Kafka 自己管理的内部系统中。这就相当于 Kafka 自力更生,逐步脱离 Zookeeper 的控制。
KRaft 是 Raft 的一个分支,但有一些不同,它扩展了 Kafka 现有的复制协议,并增加了一些与 Raft 相关的功能。
Kafka 2.8.0 版本已经对 Zookeeper 做了早期替换:
而这次 Kafka 4.0 正式移除 Zookeeper 的所有功能,KRaft 模式全面接管所有功能!
Kafka 4.0 不再支持使用 Zookeeper 模式启动集群,也就是说,从这个版本开始,你就得全面使用 KRaft 模式(Kafka Raft) 来运行 Kafka。
KRaft 带来的好处包括:
- 部署更简单,启动更快,成本更低 。
- 消除了单独维护 ZooKeeper 集合的复杂性。
- 只需保护一个组件,单一、更简单的安全模型。
- 降低了运营开销,增强了可扩展性并简化了管理任务。
- 从自身加载数据,性能比从用 ZK 高数 10 倍。
总之,移除 ZK,让 Kafka 更轻、更快、更强、更易维护!
升级 4.0 注意事项:
- Kafka 4.0 使用的是 KRaft 模式,软件和元数据版本必须至少为 3.3.x。
- 对于 KRaft 模式早于 3.3.x 的版本,建议先升级到 3.9.x,然后再升级到 4.0.x。
2、移除旧协议 API 版本
Kafka 一直以来都死磕着兼容所有协议 API 版本,这么多年过去了,维护这么多旧版本的成本是越来越高,代码变复杂了,测试也麻烦了,关键是用老版本的人也越来越少,大部分都早换到了支持新协议的客户端。
所以,到了 Kafka 4.0,彻底移除了一些旧协议 API 版本,把协议 API 版本的基准提高到 Kafka 2.1。简单来说就是,仅保留 Kafka 2.1 支持的最新版本及之后推出的新版本。
这样一来,Kafka 4.0 既能摆脱一堆历史包袱,又不会影响太多用户,算是个折中方案。总之,该优化的优化,该淘汰的淘汰,让 Kafka 走得更远、更稳!
升级 4.0 注意事项:
- 在升级 Kafka brokers 和 Java 客户端之前,应确保为 2.1 或更高版本。
- 如果不是用的 Kafka 官方的 kafka 客户端,需要自行检查兼容性问题。
3、新一代消费者重平衡协议
Kafka 3.7.0 推出了新一代消费者再平衡协议的早期版本,主要有三个变化:
- 新的消费者再平衡协议;
- 全新的组协调器;
- 全新的消费者线程模型。
新一代消费者重平衡协议,将复杂性从消费者转移到代理内的组协调器,并使用了全新的消费者线程模型。
新协议的优化,在简化客户端同时,能显著减少停机时间和延迟,提高了消费者组的稳定性和性能,尤其是在大规模部署中。
在 Kafka 3.7.0 还不建议生产使用了,Kafka 4.0 正式宣布告别 stop-the-world 重平衡,全面开放下一代消费者重新平衡协议正式可用,
4、Kafka Queues 队列来了
在 Kafka 4.0 版本之前,Kafka 主要采用发布-订阅模式,虽然也可以实现点对点的消息传递,但是存在一些局限性。
Kafka 4.0 引入了 "Queues" 队列功能,使 Kafka 能够直接支持传统队列语义,旨在更直接和高效地使用点对点消息模式,增强其在点对点消息模式下的能力。
如图所示:
Kafka 队列功能主要解决以下问题:
- 允许多个消费者从同一分区读取数据;
- 个人记录确认;
- 仍然保持生产者和消费者分离;
- 没有最大队列大小;
- 消息仍然保留
Kafka 队列是通过共享组(Share Groups)来实现的,共享群组允许多个消费者协作消费同一主题的消息,实现类似传统队列的语义。多个消费者可以共同处理同一分区内的消息,提高了消息处理的并行度和效率。
Kafka 队列现在还是早期特性,不建议生产使用,等后面的版本正式可用吧。
5、其他变化
Kafka 4.0 的其他新变化:
- 删除了至少 12 个月已弃用的 API,以简化平台并鼓励采用新功能;
- 完全弃用 Java 8,Kafka 客户端和 Kafka Streams 需要 Java 11,Kafka Brokers、Connect、工具需要 Java 17;毕竟《Java 24 正式发布,超神了。。。》都发布了。
- 为支持升级路径,定义了新的基准要求;
- ……
更多可参考官方发布说明。
总结
Kafka 4.0 版本的更新,标志着 Kafka 正式迈入了一个全新的阶段。
从完全弃用 Java 8,再移除 Zookeeper 到全面启用 KRaft,Kafka 变得更轻、更快、更强、更易维护。
还有旧协议版本的清理、新的消费者重平衡协议、队列功能的引入等一系列优化,让 Kafka 进一步提升了可扩展性和性能,同时降低了维护成本。
不过,升级到 Kafka 4.0 也需要谨慎对待,特别是 Zookeeper 模式已经被完全移除,老版本的用户需要逐步过渡到 KRaft 模式。
同时,部分旧协议 API 也已被砍掉,所以在升级前一定要检查兼容性,确保你的系统不会受到影响。
总之,Kafka 4.0 是一次里程碑式的升级,无论是新的架构调整还是性能优化,都让 Kafka 这个小钢炮又上了一个新的台阶,太强了。
参考链接:
- https://kafka.apache.org/blog
- https://x.com/BdKozlovski/status/1891139227599183920
- https://x.com/BdKozlovski/status/1658923666103468033
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。