再也不怕面试官问kafka为啥这么快之数据持久化

目录

一、前言

1.1 为啥要琢磨kafak这么快

1.2 研究kafka这么快需求准备的材料

二、kafka 数据持久化为啥快



一、前言

1.1 为啥要琢磨kafak这么快

        面试常考问题,也是一个很考察对kafka理解深度的问题。坦白地说,这个问题我也回答不好。以前我的回答说白了就是网上背下来的,就是kafka是对使用系统内核直接将数据写到磁盘上,然后磁盘的顺序写速度比较快,所以刷写数据块,这个回答太糙了。

        深层次的需求:为啥kafka可以这么快,究竟是咋设计的,搞来看看。不是都说从优秀源码学习编程效率高么,那就学学呗。

1.2 研究kafka这么快需求准备的材料

  • kafka官网
  • kafka源码
  • 百度翻译或谷歌翻译

二、kafka 数据持久化为啥快

       友情提示:这一段都是我根据官方文档理解的,不到位,诸位看官请移步官方文档。

        kafka综合了消息队列、消息中间件、数据存储的混合产品,必然对数据持久化要求比较高。尽管如此,kafka和其他例如DFS什么的,没有开发自己的filesystem系统,而是直接使用系统原生的filesystem。这个就比较有趣了,因为我们正常使用经验来说,本地磁盘是不慢,难道就能满足kafka千万级吞吐的要求么,我也很好奇。

       那这个时候,kafka的官方文档撩了一句话说,磁盘这个东西,跑得快,全看程序员的设计能力。要是设计得当的话,磁盘的速度能和网络传输一样快。为什么这么说,那是因为磁盘快不快,全看磁盘寻道的时间。这个地方太抽象,一个彩图看一下,一个灰图。这两张图片描述的都是一个东西,我这边简单用语言描述一下。

        下面这个是一个磁盘的物理结构图,为啥叫磁盘,因为中间那个盘上面有磁力,所以叫磁盘,也就是非易失型存存储,也就是掉电了数据还在。看图说话,中间那个spindle叫做轴把打了一个孔的platter也就是磁盘固定住,axis就是一个活动轮子带一个杆子,杆子前面是一个磁头,就来回扫。每次,从磁盘读数据时候,这个磁头就去扫。看看这个结构是不是有点像一个什么东西,像一个唱片机。

    

             磁盘读数据大概就是这个过程噻。不同的是磁盘是有很多个盘叠在一起,而且每个盘上被划了很多个同心圆,每个同心圆,又划分成几个小段。

唱片机

那么我们下面再看一下磁盘的数据存储过程细节,首先是磁盘上面画了很多道圈圈,每个圈圈里面有划分出成一段段扇形,那么每一个扇形就是存储数据的地方。那从磁盘上拿数据的简化过程就是,我的磁头先去放到那个数据所在的track上,我再去那个track上找对应的sector。

 那接下来就是大胆分析一下,磁盘读取数据快慢的问题,显然数据读取快慢取决于两个因素:

  1. 磁头读到的数据发送计算机内存的时间
  2. 磁头寻找数据所在轨道的时间,。找到轨道,在轨道上转圈圈找对应数据存储的sector时间。

放飞一下想象,如果一个数据存储在多个同心圆上,或者是不同platter的同心圆上,那磁头转来转去,转到了还要再画圈圈找,那岂不是很浪费时间。

        kafka是采用pagecache的方法减少内存拷贝,使用direct IO直接进行磁盘数据刷写。即便这样还要进行性能优化,就是kafka程序刷写的数据都是字节流的形式,不是object。这也有效减少了内存消耗。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锤爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值