一 磁盘读写原理

磁盘的结构图:

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

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

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

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

  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里去,这其实就是一个预读过程,对于需要连续读取历史数据的,也是性能的不小优化。

漫画面试回答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. python下载安装教程mac-数据分析入门~mac 下载及安装 Python 环境
  2. pandas官方文档_电影数据轻松学习 Pandas
  3. 如何捕获window.print点击打印或取消_视频:手把手教您如何优化喷墨波形
  4. IDEA 2020.3 连接mysql数据库报错解决
  5. 使用VMware克隆Linux系统
  6. 阿里云创新产品团队招聘!一大波岗位呼唤你
  7. cve-2018-2893 WebLogic
  8. 黑马java架构师课_【黑马精品】Java架构师实战训练营
  9. 【精】beautify插件使用及配置汉化
  10. R和RStudio安装包下载
  11. hdu-1022-Train Problem I
  12. TemplateBinding和Binding的区别
  13. cat 链接并显示文件
  14. 区块链能否遏制公共部门的腐败行为?
  15. “离婚”华为后,荣耀第一胎满身伤痕
  16. 【java基础】java异常,捕获与抛出
  17. 物联网RFID技术在智能交通系统的应用
  18. d3库(d3.js) 持续整理
  19. php开发兴趣培训班,培训班学PHP,感觉兴趣越来越低,哎,真的很迷茫了!
  20. AD铺铜中铺地选择异形铺铜方式

热门文章

  1. 行业“无人区”生存法则:看新潮传媒市场策略“广度”
  2. Python环境的安装及配置
  3. 抖音快手短视频推广方式
  4. JavaScript函数---箭头函数
  5. Debian(Linux)系统安装并使用sudo命令
  6. js数组方法 some与every的使用
  7. luffy-15/区间过滤,搜索功能前端后端,支付宝
  8. 方舟编译器只能编译Java_方舟编译器的安装和编译Helloword
  9. TI-RTOS实时操作系统开发之低功耗模式和外部唤醒
  10. 直播回顾:关于龙蜥操作系统软件包构建,这有一份开发者指南(附PPT)