从kafka到磁盘读写顺序

今天看kafka官网的文档,关于性能方面的讨论时,又提到了磁盘随机读写和顺序读写性能方面的事,借此机会整理一下。

现在的大数据工具一般都会设计为append only的形式,既文件只能追加写,其它的删、改都只能建立在append only的基础上,如删一条数据只能append一个记录,把要删的数据标记为删除,而不能从磁盘中删除原数据,这样的机制主要就是尽可能保证磁盘是顺序读写。这里就有两个问题,一个是为什么说是尽可能,另一个是为什么要顺序读写。

一:为什么说是尽可能

这方面我自己也不是太清楚操作系统底层的磁盘读写原理,根据查的资料和自己对操作系统的理解,大概归纳如下:在操作系统看来两个逻辑上连续的sector未必在物理上就是连续的,因为读写都是物理地址映射出的基于虚拟地址,而现代操作系统基本都使用main memory为需要写的data做cache,使用append only的方法,能够尽可能的使得要写的内容在物理上连续,从而读的时候也是一个顺序读

二:顺序读写和随机读写性能差距有多大:

我们知道,磁盘读写最慢的地方在于寻道,根据kafka官网写的资料是,寻道时间大概10ms,寻道之后磁头顺序读取信息的速度是很快的,根据kafka官网的说法,6个7200转的磁盘组成raid5,顺序写的速度能达到(600MB/S),而随机读写速度仅为100kb/s,如下图所示,顺序读有时候比内存的随机读取还要快。而从stackoverflow上搜索得到的答案是,单块磁盘每30ms能写1MB数据,写100MB数据大概需要3秒钟。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.fengpt.cn/archives/从kafka到随机读写