贵州省建设局八大员报名网站,可以进不良网站的浏览器,网站建设与规划的书,手机端网站建设要点1. 追加写
根据以上的部分我们发现存储的方式比较有规划是对于后续查询非常便捷的#xff0c;但是这样存储是不是会更加消耗存储性能呢#xff1f;
其实kafka的数据存储是追加形式的#xff0c;也就是数据在存储到文件中的时候是以追加方式拼接到文件末尾的#xff0c;这…1. 追加写
根据以上的部分我们发现存储的方式比较有规划是对于后续查询非常便捷的但是这样存储是不是会更加消耗存储性能呢
其实kafka的数据存储是追加形式的也就是数据在存储到文件中的时候是以追加方式拼接到文件末尾的这样就非常快速的跳过了文件的检索。
机械磁盘的文件检索需要使用到磁头进行不断扫描数据如果存储大量的小文件或者存储位置不同的时候需要不停的扫描检索文件的位置这个过程是非常浪费时间的但是kafka的数据完全以追加的方式存储到磁盘中的那么这个时候就完全省去了这样的一个过程使得机械磁盘的性能和固态的性能相差无几索步骤。 我们可以看到经过测试机械磁盘的存储性能可以达到600M/s 但是随机读写就比较慢100k/s
所以追加写造就了kafka的高写入性能。
写入的速度非常快那么读取的性能是如何保证的呢
首先kafka的数据就是以分区作为单位进行分布式管理的所以多个机器共同管理效果更加明显
前文中说过kafka的存储是按照segment切分的并且存储的数据是带有index索引的这个速度可以几乎直接定位到相应的检索文件。
并且kafka还实现了零拷贝技术。
2. 零拷贝技术 首先我们可以看到普通的存储在磁盘上的文件要想发送出去的话需要走以上的步骤
通过内核和用户空间的加载反反复复经过4次加载和拷贝过程这个过程是非常消耗性能和io的
其实直白来说如果数据加载的过程中不走用户缓冲区的话直接以内核加载一次的方式进行传输效率是更加高效的。 所以使用到零拷贝技术方式就是只将数据从磁盘加载到内存中一次然后直接从内核空间将数据发送到网卡从而直接传输给消费者端。
零拷贝技术的本质就是怎么减少数据的复制过程并不是没有数据的复制。
这个实现方式就是使用到sendFile的系统函数它可以直接实现系统内存的映射。