Kafka为什么能撑住亿级消息(4大核心技术)

Kafka是大型架构的核心,下面我重点详解Kafka亿级消息技术@mikechen

分区水平扩展

Kafka 的 Topic 可以划分为多个 分区(Partition),分布在不同的 Broker 节点上。

Producer 写入时,可以按照 Key 或随机策略 将消息分配到不同分区。

通过增加分区数量和 Broker 节点,Kafka 能将负载横向分配至更多存储与计算资源,从而线性提升吞吐能力。

Kafka为什么能撑住亿级消息(4大核心技术)-mikechen

生产者按分区选择策略(如轮询或基于 key 的哈希),将消息分散到不同分区。

消费者组内的消费者则并行消费不同分区,实现消费端的扩展。

 

顺序写优化

Kafka 的消息存储是 追加写日志文件(Append Only Log)。

磁盘的 顺序写 性能比随机写高几个数量级,几乎接近内存。

Kafka 借助 Linux Page Cache:消息先写入内存缓冲区,再由操作系统批量刷盘。

Kafka为什么能撑住亿级消息(4大核心技术)-mikechen

优势:消除了频繁随机写磁盘的开销。

批量刷盘减少了 I/O 系统调用,提高吞吐率。

类比:就像在日记本最后一页一直往下写,而不是不停翻页找地方记录。

 

零拷贝

零拷贝技术是 Kafka 实现高吞吐量读取的关键,它优化了数据在网络传输过程中对 CPU 的消耗。

核心原理:绕过应用层 CPU 拷贝。

Kafka为什么能撑住亿级消息(4大核心技术)-mikechen

传统 I/O 瓶颈: 在没有零拷贝的情况下,消息从磁盘文件发送到网络通常需要经过 4 次数据拷贝和多次上下文切换(内核态 用户态)。

零拷贝优化: Kafka 利用 Linux 内核提供的 sendfile()transferTo() 等系统调用。

数据从磁盘直接传输到 内核 Socket 缓冲区。

整个过程跳过应用程序用户空间,避免了不必要的 CPU 介入和内存拷贝。

 

批量处理

Kafka 通过批量处理消息来分摊固定开销,从而提高系统的整体效率。

生产者,不会为每一条消息都发送一个独立的网络请求。

它会在本地将多条消息打包成一个消息批次(Batch),然后一次性发送给 Broker。

Kafka为什么能撑住亿级消息(4大核心技术)-mikechen

整个消息批次可以在发送前进行压缩(如 Snappy, Gzip, LZ4 等)。Broker 收到后,以压缩格式写入磁盘。

这样,极大减少了网络传输的数据量和磁盘 I/O 负载。

评论交流
    说说你的看法