大家好,我是码哥,《Redis 高手心法》作者。
2025 年 3 月,Apache Kafka 迎来了具有划时代意义的 4.0 版本。这一版本不仅是技术架构的全面革新,更是功能场景的深度拓展。
码哥第一时间对 4.0 版本分析,为大家深度解读 Kafka 4.0 的核心特性,以下是码哥认为比较重要的特性:
Apache Kafka 4.0 是一个重要的里程碑,标志着第一个完全无需 Apache ZooKeeper® 运行的主要版本。
通过默认运行在 KRaft 模式下,Kafka 简化了部署和管理,消除了维护单独 ZooKeeper 集群的复杂性。
这一变化显著降低了运营开销,增强了可扩展性,并简化了管理任务。
在 Kafka 3.x 及更早版本中,ZooKeeper(ZK)是元数据管理的核心组件,负责 Broker 注册、Topic 分区分配、控制器选举等关键任务,如图所示。
然而,这种设计存在显著问题:
Apache Kafka Raft(KRaft)是在 KIP-500 中引入的共识协议,用于移除 Apache Kafka 对 ZooKeeper 进行元数据管理的依赖。这通过将元数据管理的责任集中在 Kafka 本身,而不是在两个不同的系统(ZooKeeper 和 Kafka)之间分割,从而大大简化了 Kafka 的架构。
KRaft 模式利用 Kafka 中的新法定多数控制器服务,取代了之前的控制器,并使用基于事件的 Raft 共识协议的变体。
Kafka 4.0 默认启用KRaft 模式(Kafka Raft),完全摒弃 ZK 依赖。其核心原理如下:
__cluster_metadata
主题中,由 Controller 节点(通过选举产生)统一管理。我们可以看出 KRaft 替换 ZK,并不是元数据存储重新造轮子,而核心是集群协调机制的演进。
整个通信协调机制本质上是事件驱动模型,也就是 Metadata as an Event Log,Leader 通过 KRaft 生产权威的事件,Follower 和 Broker 通过监听 KRaft 来获得这些事件,并且顺序处理事件,达到集群状态和期望的最终一致。
传统消费者组采用Eager Rebalance 协议,存在两大瓶颈:
Kafka 4.0 引入增量式重平衡协议(KIP-848),核心改进包括:
GroupCoordinator
统一调度,消费者仅需上报状态,无需全局同步。指标 | 旧协议(Eager) | 新协议(Incremental) |
---|---|---|
重平衡延迟(万级组) | 60 秒 | <1 秒 |
资源消耗(CPU) | 高 | 降低 70% |
扩展上限 | 千级消费者 | 十万级消费者 |
Kafka 4.0 引入了一种强大的新消费者组协议,旨在显著提高重新平衡性能。
这种优化显著减少了停机时间和延迟,增强了消费者组的可靠性和响应性,尤其是在大规模部署中。
传统上,Kafka 主要采用发布-订阅模式,消费者组模式下,分区需与消费者一一绑定,如下图所示。
无法实现多消费者协同处理同一分区消息,消费者数量不能超过分区数量——最多为一对一。
如下图所示,Consumer 5 无法处理 Topic 消息。
而在某些特定场景下,如点对点的消息传递、任务分配等,传统的队列语义更具优势。
Kafka 4.0 通过引入“队列”功能,共享组(Share Group),允许多消费者同时处理同一分区消息,实现点对点消费模式。
特性 | 传统消费者组 | 共享组 |
---|---|---|
并行消费 | 分区数=消费者数 | 消费者数>分区数 |
消息确认 | 偏移量提交 | 逐条 ACK/NACK |
投递语义 | At-Least-Once | Exactly-Once(可选) |
主要特点:
Kafka 4.0 通过共享组实现队列语义,关键技术包括:
Kafka 一直以来都致力于兼容各个版本的协议 API,但随着时间的推移,维护大量旧版本的协议 API 带来了许多不必要的复杂性和成本。
在 Kafka 4.0 中,旧版本的协议 API 被彻底移除,系统基准协议直接提升至 Kafka 2.1 版本。
改进点:
KafkaProducer
与KafkaConsumer
接口,减少冗余配置项,减少了测试难度。MessageFormatter
v0)值得注意的是,在 Kafka 4.0 中,Kafka 客户端和 Kafka Streams 需要 Java 11,而 Kafka Brokers,Connect 和工具现在需要 Java 17。
Kafka 4.0 的其他新变化:
num.io.threads
根据 CPU 核数动态分配,提升资源利用率。Kafka 4.0 通过彻底摆脱 ZooKeeper,全面采用 KRaft 模式,不仅简化了部署和维护工作,还显著提升了系统的性能和稳定性。
同时,新一代消费者重平衡协议和队列功能的引入,为开发者提供了更为灵活和高效的消息处理模式。
这些架构革新使得 Kafka 4.0 成为了一个更加独立、高效和易用的分布式消息系统,为未来的发展奠定了坚实的基础。