一 磁盘读写原理

磁盘的结构图:

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

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

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

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

  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. Linux nohup命令用法详解
  2. 关于Cocos2d-x中增加暂停按钮的步骤
  3. (018)java后台开发之语法输出流flush()方法
  4. mssql自定义函数中使用游标
  5. c++新特性11 (9)智能指针一”_Compressed_pair类“
  6. LDR指令和LDR伪指令区别
  7. 三年级计算机画图,三年级面积作图题_小学三年级要求画图
  8. apache camel_带有调试器的Apache Camel Eclipse工具
  9. Mate 50年内无望!华为确认10月海外发布会主角是nova系列
  10. 编程常见错误——循环中进行有符号数和无符号数的比较
  11. 全排列算法(字典序法、SJT Algorithm 、Heap's Algorithm)
  12. 人工智能/数据科学比赛汇总 2019.9
  13. 【Apache Kylin 】 大数据下的OLAP解决方案(原理篇)
  14. PHP Class SoapClient not found解决方法
  15. 2021-6-28 项目实训-研究生管理系统
  16. 手撕Bert代码(torch版)
  17. EPON SFU MDU
  18. 计算机弹奏音乐最好用哪个声调,音乐降调软件哪个好?好用的音乐降调软件推荐...
  19. apache调优技巧之一隐藏apahce版本信息
  20. Linux开发:快速开发游戏的9个关键!

热门文章

  1. 12 位分辨率模拟量采集模块
  2. 在线申请会员卡正在审核中问题排查?
  3. oracle群集有那些类型,oracle群集的配置
  4. EtherNET/IP协议基础知识(上)
  5. 电脑中了incaseformat病毒怎么办? incaseformat病毒删除方法
  6. go-zero框架的学习-短链服务
  7. 互联网云学院(邯郸AESO培训基地)
  8. B-tree vs hash_我思故我在_百度空间
  9. 01_电子工程师 嵌入式软硬件工程师开发工具合集(简单易学-新电脑装机清单)
  10. 脑梗塞能治好吗?成都顾连康复治疗方法