一 磁盘读写原理

磁盘的结构图:

当需要从磁盘读取数据时,要确定读的数据在哪个磁道,哪个扇区:

  • 首先必须找到柱面,即磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间;

  • 然后目标扇区旋转到磁头下,这个过程耗费的时间叫做旋转时间;

一次访盘请求(读/写)完成过程由三个动作组成

  1. 寻道(时间):磁头移动定位到指定磁道;

  2. 旋转延迟(时间):等待指定扇区从磁头下旋转经过;

  3. 数据传输(时间):数据在磁盘、内存与网络之间的实际传输

由于存储介质的特性,磁盘本身存取就比主存慢,再加上机械运动耗费,磁盘的存取速度往往是主存的几百分之一甚至几千分支一

二 利用page cache+mmap

1.page cache

Page Cache :以Page为单位,缓存文件内容。缓存在Page Cache中的文件数据,能够更快的被用户读取。同时对于带buffer的写入操作,数据在写入到Page Cache中即可立即返回,而不需等待数据被实际持久化到磁盘,进而提高了上层应用读写文件的整体性能。cached这列的数值表示的是当前的页缓存(page cache)的占用量,page cache文件的页数据,页是逻辑上的概念,因此page cache是与文件系统同级的

buffer cache:磁盘等块设备的缓冲,内存的这一部分是要写入到磁盘里的 。buffers列 表示当前的块缓存(buffer cache)占用量,buffer cache用于缓存块设备(如磁盘)的块数据。块是物理上的概念,因此buffer cache是与块设备驱动程序同级的。

2.什么是mmap

三 零拷贝

从系统安全和保护的角度出发,在进行计算机体系结构设计时,处理机的执行模式一般设定为两种:分别称为内核模式(内核态)和用户模式(用户态)。当处理机处于内核模式执行时,意味着系统除了可以执行一般指令外,还可以执行特权指令,即可以执行访问各种控制寄存器的指令、I/O指令以及程序状态字。

当处理机处于用户模式执行时,只能执行一般指令,而不允许执行特权指令。这样做可以保护核心代码不受用户程序有意和无意的攻击。

显然,处理机在运行期间需要在内核模式和用户模式之前进行切换。

可以发现一次IO请求操作进行了2次上下文切换和4次系统调用,而同一份数据在缓存中多次拷贝,实际上对于拷贝来说完全可以直接在内核态中进行,也就是省去第2和第3步骤,变成这样:

四 存储设计

五 批量发送

六 压缩

  1. 如果每个消息都压缩,但是压缩率相对很低,所以Kafka使用了批量压缩,即将多个消息一起压缩而不是单个消息压缩

  2. Kafka允许使用递归的消息集合,批量的消息可以通过压缩的形式传输并且在日志中也可以保持压缩格式,直到被消费者解压缩

  3. Kafka支持多种压缩协议,包括Gzip和Snappy压缩协议

七 消息写的过程

生产者发送批量压缩的数据到broker,broker通过MappedByteBuffer的map()函数映射其地址到你的虚拟内存地址。接着就可以对这个MappedByteBuffer执行写入操作了,写入的时候他会直接进入PageCache中,然后过一段时间之后,由os的线程异步刷入磁盘中,可以看上面的示意图。

上图中似乎只有一次数据拷贝的过程,他就是从PageCache里拷贝到磁盘文件里而已!这个就是你使用mmap技术之后,相比于传统磁盘IO的一个性能优化

八 消息读的过程

读取数据的时候,会先判断page cache中是否存在,存在就可以直接从page cache中消费,所以消费实时数据就会速度快很多。但是消费历史数据就不得不将历史数据重新加载到page cache,而且会污染掉page cache。

PageCache技术在加载历史数据的时候,还会将你加载的数据块的临近的其他数据块也一起加载到PageCache里去,这其实就是一个预读过程,对于需要连续读取历史数据的,也是性能的不小优化。

推荐阅读:

基于Groovy的规则脚本引擎实战

漫画讲解Kafka高效的存储设计|面试

漫画全面解释Spark企业调优点

漫画面试回答kafka为何如此之快|满分相关推荐

  1. 漫画面试回答kafka为何如此之快

    一 磁盘读写原理 磁盘的结构图: 当需要从磁盘读取数据时,要确定读的数据在哪个磁道,哪个扇区: 首先必须找到柱面,即磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间; 然后目标扇区旋 ...

  2. IT外企面试回答技巧

     1.请简单介绍一下你自己. 这是外企常问的问题.一般人回答这个问题过于平常,只说姓名.年龄.爱好.工作经验,这些在简历上都有,其实,外企最希望知道的是求职者能否胜任工作,包括:最强的技能.最深入 ...

  3. (转载)职场面试如何自我评价,面试回答问题技巧

    转载:http://www.201980.com/lizhi/zhichang/1541.html 职场里,职场面试是很平常不过的事了,不一定是职场新人为了找工作的面试,参加工作以后,竞聘岗位有竞聘演 ...

  4. Solr面试回答思路

    Solr面试回答思路 是什么? 化繁为简的介绍一下这个技术是干嘛的 solr是基于Lucene的,主要用作全文检索. 同类型技术 ElasticSearch,这个时候很自然的需要去了解两种技术的简单区 ...

  5. spring bean的生命周期面试回答及代码演示

    前言: 在面试中经常会被问到谈谈你对spring bean生命周期的理解,如果单方面的在网站看写的博客很难理解的,最好自己写代码体会他的实现流程. 1.先了解这几个类的意思 BeanNameAware ...

  6. 面试回答问题的小套路

    先把结论抛出来,如果感觉有道理就继续往下看,如果不认同就省了浪费时间了 面试回答问题不是做选择题,更不是做判断题,而是作文题 要引导面试官往你自己会的题目上问问题,切忌就问题回答问题 首先要分析问题, ...

  7. 就计算机应用领域而言航天器,【判断题】面对面试官的提问,反应越快越好。...

    [判断题]面对面试官的提问,反应越快越好. 更多相关问题 [单选] 在excel2003中,向一个单元格输入公式时,必须使用的前导字符为() [单选] 计算机的运算速度通常采用的计量单位是() [单选 ...

  8. 经典面试|为何Kafka这么快?

    大家好,今天让我们一起来深入了解 Kafka "快"的内部秘密.你不仅可以学习到 Kafka 性能优化的各种手段,也可以提炼出各种性能优化的方法论,这些方法论也可以应用到我们自己的 ...

  9. 第二十四期:面试问:Kafka为什么速度那么快?该怎么回答

    针对Kafka的基准测试可以参考,Apache Kafka基准测试:每秒写入2百万(在三台廉价机器上)下面从数据写入和读取两方面分析,为什么Kafka速度这么快 Kafka的消息是保存或缓存在磁盘上的 ...

最新文章

  1. 【面试必问】支撑百万并发的IO多路复用技术你了解吗?
  2. PHP array_key_exists() 函数(判断某个数组中是否存在指定的 key)
  3. JAVA之JVM之内存分配与回收策略(二)
  4. python性能解决_Python性能优化的20条建议
  5. 华为帐号忘记显示服务器繁忙,显示云服务器繁忙怎么操作
  6. [TimLinux] JavaScript 元素动态显示
  7. 解决svn cannot set LC_CTYPE locale的问题
  8. c程序100例第3题
  9. @ Before,@ BeforeClass,@ BeforeEach和@BeforeAll之间的区别
  10. 前缀列表技术原理和实验(华为设备)
  11. 中国结算-金融机构服务平台(FISP平台)
  12. FastCGI介绍(快速通用网关接口)
  13. clickhouse 同步mysql_腾讯大牛教你ClickHouse实时同步MySQL数据
  14. RBF神经网络算法分析与应用(适合快速入门实战)
  15. 单片机和微型计算机硬件组成的异同,单片机和嵌入式的区别是什么
  16. 重建致远OA系统的步骤
  17. 关于SwiftUI,看这一篇就够了
  18. 【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Tensorflow-DirectML篇)】
  19. linux内核的原子操作简述
  20. 3、Kubernetes的基本使用

热门文章

  1. Unity打包Xcode基于Storyboard制作iOS闪屏
  2. 第五人格显示服务器维护中请稍后登录怎么办,第五人格登录不上怎么办 登录不上解决方案...
  3. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案使用详情功能-通道配置Excel导入导出
  4. 不好意思,问一个比较菜的问题,请问高手,Blogs与FAQ有没有区别?
  5. 枯燥的废话:2022 - 2023总结加上一些话题
  6. 《化工流体力学》课程笔记(二)
  7. 田忌赛马问题java,田忌赛马—对策问题教学案例
  8. 华为鸿蒙吃鸡,华为鸿蒙 OS 2.0 性能简测:极致画质下的吃鸡王者更胜 EMUI 11
  9. spring security 匿名登录
  10. 【Android】打开红包、信封动画