Kafka到底是怎么做到一秒钟处理上千万消息的,背后有什么秘密和技术诀窍?
- 问答
- 2026-01-12 04:31:09
- 2
要理解Kafka为什么能这么快,我们不能只看某一个点,而是要把它的设计看作一个精密的系统工程,它不是靠什么神奇的“银弹”,而是一系列务实、高效的设计选择叠加在一起产生的效果,这些设计诀窍的核心思想可以概括为:尽可能地让硬盘顺序读写代替内存随机读写,并最大限度地减少不必要的网络交互和数据处理开销。
第一个核心秘密:把硬盘当内存用,顺序读写是王道。
很多人觉得硬盘慢,但那指的是随机读写,当你需要频繁地在硬盘的不同位置读写小块数据时,磁头需要来回移动,这非常耗时,但Kafka反其道而行之,它所有的消息都是顺序追加写入到日志文件的,这就好比是在一个本子上写日记,你总是翻到最后一页接着写,速度非常快,同样,消费者读取消息时,也是从某个位置开始,连续地、一大块一大块地顺序读取,这种顺序读写的性能,尤其是在使用高速硬盘的情况下,可以逼近甚至超过内存的随机读写性能,这样一来,Kafka就实现了数据的持久化(消息直接落盘,不会因为断电丢失),同时又获得了极高的吞吐量,引用自Kafka官方文档和JVM专家Martin Kleppmann的相关论述,这种设计是其高吞吐的基石。
第二个核心秘密:极致的批处理思想,化零为整。
如果生产者每产生一条消息,Kafka就处理一条、网络传输一条、硬盘写入一条,那系统很快就会因为大量的琐碎操作而崩溃,Kafka的聪明之处在于,它在各个环节都采用了批处理,生产者并不会立刻发送单条消息,而是会先攒一小批,然后一次性发送给Kafka服务器,同样,Kafka服务器在将数据写入硬盘时,也是将这一整批消息顺序追加到日志中,消费者拉取消息时,也是一次性拉取一批,这种做法极大地减少了网络往返次数和硬盘I/O操作次数,将大量小的、高开销的操作合并成少数大的、高效的操作,这就像快递送货,一件一件送效率极低,而装满一卡车统一送,成本就摊薄了,这个思想在LinkedIn工程师关于Kafka设计的分享中被反复强调。
第三个核心秘密:零拷贝技术,让数据“抄近道”。
这是一个听起来高大上但原理很直接的技术,在普通的数据传输过程中,数据从硬盘读出来,需要先经过操作系统的内核缓冲区,然后拷贝到应用程序(Kafka)的内存空间,最后Kafka再把它拷贝到网络接口的缓冲区发送出去,这中间经历了多次不必要的拷贝,消耗CPU资源,而零拷贝技术(主要依赖Linux的sendfile系统调用)允许Kafka直接让操作系统将数据从硬盘的某个区块,直接传输到网络接口,绕过了应用程序的中间拷贝环节,这就好比是,文件直接从仓库(硬盘)装车(网卡)运走,省去了搬到办公室(应用内存)再装车的麻烦,这个技术大大降低了CPU的负担,使得Kafka在高速网络传输时,CPU不会成为瓶颈,这项优化在《Kafka:权威指南》一书中有详细解释。
第四个核心秘密:分而治之的分区机制与高效的消费者模型。
一个Topic(主题)的消息流可以被分成多个分区,每个分区都是一个独立的、有序的日志序列,分区机制带来了两大好处:一是并行处理,生产者可以同时向多个分区写入消息,消费者可以组成小组并行消费不同分区的消息,水平扩展能力极强,二是它实现了简单的消费者模型,传统的消息队列需要服务器记录每个消费者的消费状态,非常复杂,而Kafka的消费者状态极其简单:它只需要自己记录当前消费到了哪个分区的哪个偏移量,消费消息时,消费者主动向Kafka“拉取”数据,并且可以控制拉取的量和速度,这种“拉”模型和基于偏移量的管理,使得Kafka服务器本身变得非常“轻量”,无需跟踪复杂的消费状态,从而能支撑海量消费者,这种设计在Jay Kreps(Kafka创始人之一)的论文《The Log: What every software engineer should know about real-time data's unifying abstraction》中有深刻的阐述。
第五个核心秘密:利用操作系统的页缓存,而不是急于强制刷盘。
Kafka重度依赖操作系统自身的页缓存机制,当数据写入Kafka时,它首先是被写入到操作系统的页缓存(内存)中,而不是直接、强制地刷入物理硬盘,操作系统会在后台智能地将脏页缓存异步写入硬盘,对于读取,Kafka也会尝试直接从页缓存中读取数据,如果数据还在内存中,速度就会极快,这种策略避免了在应用程序层面进行复杂的内存管理,也避免了同步刷盘带来的性能抖动,将刷盘的时机和策略交给了更底层的、更成熟的操作系统去优化。
Kafka一秒钟处理千万消息的能力,不是偶然,而是其架构设计的必然结果,它通过顺序读写硬盘突破了存储瓶颈,通过批处理降低了网络和I/O开销,通过零拷贝节约了CPU资源,通过分区机制实现了无限的扩展性,并通过依赖页缓存和简单的消费者拉模型让系统保持轻量和高效,这些设计环环相扣,共同造就了Kafka在大数据实时处理领域的王者地位。

本文由符海莹于2026-01-12发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/79103.html
