Kafka的高性能主要来自于以下几个方面:
一,磁盘顺序写 + Page Cache机制
Kafka的写入是append-only的顺序写,避免了磁盘寻址开销,比随机写要快很多,同时消息是写入的操作系统的Page Cache,由操作系统来统一刷盘,进一步提高了写入速度。
二,零拷贝技术
Kafka使用sendfile的系统调用,是直接将数据从磁盘传输到socket缓冲区,避免了数据在用户态和内核间的多次拷贝,提高数据传输效率。
三,批量处理(批量写入 + 批量读取)
Kafka中的Producer,Consumer,以及Broken写磁盘,都是批量操作,一次处理多条数据,有效减少I/O次数,提升整体吞吐量
四,分布式架构 + 多分区并发
每个Topic都可以划分为多个partition,由不同的Producer/Consumer独立处理,实现天然并行。
同时可以横向扩展节点,纵向充分利用多核资源,支撑高并发的读写处理。
五,高效的索引机制
每个partition的日志文件都维护.index和.timeindex,Kafka通过二分查找快速定位offset,对消费端的读取性能有很大提升。
Kafka的高性能是多个底层优化的结果,写入阶段是批量操作,磁盘顺序写+Page Cache机制,读取阶段是靠零拷贝,高效索引机制,再配合批量处理,多partition并发架构,实现了高吞吐,低延迟的性能目标。