解密kafka性能为何这么快
一 磁盘顺序读写
我们来看一份关于顺序存储的结论:
从上图我们可以看到,最快的肯定是内存,但是在常规的磁盘下,顺序存储的性能是非常优秀的,于是kafka就采取了顺序存储的方式来设计:
kafka为了保证每个分区在数据被消费后,新的数据进来不影响顺序存储,采取了折中的方案,即不实时的删除数据。而是采取策略,基于时间或者分区文件的大小做统一删除,保证数据的连续。
二 页缓存
Kafka避免使用JVM
直接使用操作系统的页缓存特性提高处理速度
进而避免了JVM GC带来的性能损耗
Kafka采用字节流,紧密存储,避免产生对象,这样可以进一步提高空间利用率
三 零拷贝(不进行和用户态的拷贝)
鉴于kafka采用了页缓存直接利用操作系统,而linux有一个特性就是0拷贝。
假如磁盘有一条数据要被读取,他会先被加载到内核态的页缓存中,但是直接内核态的数据我们是无法利用的,需要复制到用户态的应用内存中,但是kafka没这样做,在数据被加载到页缓存的时候,直接发送到socket缓存区。
四 批量操作
kafka支持批量的数据操作。