目录
1.磁盘顺序写
2.零拷贝
3.数据压缩
4.消息批量处理
5.pageCache
6.稀疏索引
总结
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。那么他是如何做到高性能的呢,本篇文章从宏观上分析一下,具体细节后续文章会持续更新,欢迎大家捧场阅读,希望能对你有所帮助。
1.磁盘顺序写
我们都知道,磁盘的随机IO非常慢, 7200rpm SATA RAID-5 顺序写速度可达 600MB/sec ,但是随机写速率 100k/sec,相差6000倍,kafka消息写入采用了顺序写。
2.零拷贝
传统的数据传输,需要经历用户态和内核态的4次切换,4次数据copy,如图
零拷贝,带有 DMA 收集拷贝功能的 sendfile 实现的 I/O使用了2次用户空间与内核空间的上下文切换,2次数据的拷贝,而且这2次的数据拷贝都是非CPU拷贝,这样就实现了最理想的零拷贝I/O传输了,不需要任何一次的CPU拷贝,即数据直接从内核缓冲区 copy 到网卡。如下图
3.数据压缩
支持压缩算法,如Gzip,Snappy,Lz4,Zstd。
压缩流程:Producer 压缩,broker 保持,consumer解压缩
4.消息批量处理
producer发送消息给broker,消息在producer端等待达到batch.size (默认值16k)时,才会发 送至broker端,减少网络IO,提升效率
5.pageCache
数据写入和读取时,调用了linux底层的sendfile机制,pageCache 页缓存通常是4k,用于提 高文件的读写效率的缓存页。
6.稀疏索引
日志文件类型:.log文件,index.log,timeIndex.log
索引文件目的是在高效查找分区内的位置,通过二分查找算法实现
总结
以上是从整体上总结了kafka支持高性能的6点原因,我们先从宏观上有个清晰的认知
具体每个原因的具体内部技术细节,后期会慢慢给大家分析