措施员经典口试题,Kafka读写硬盘为什么速率还那么快
在本日的许多措施员雇用里,城市要求可以或许纯熟运用Apache Kafka等至少一种动静行列,Apache Kafka也是措施员口试里的常客。在大大都人的映象中,写磁盘都是较量慢的,然则,为什么Apache Kafka在各大MQ机能的评测中,还可以或许击败浩瀚敌手,取得不错的后果呢? 次序写磁盘 在我们的出产情形中,为了节省本钱,大部门处事器如故行使机器磁盘,而非固态硬盘。我们知道,机器磁盘读写数据,起首必要寻道,将磁头调解到对应的磁道上,紧接着,会举办旋转,将磁头旋转到对应的位置上,最后才是读写数据,寻道跟旋转,占用了磁盘读写的大量时刻,以是,Apache Kafka在写磁盘的时辰,大量地行使了追加写的模式,镌汰了磁盘寻道与旋转地时刻,从而到达更高的磁盘操作率。 大量行使内存页 我们知道,即即是次序写磁盘,磁盘的读写速率任然比内存逐步的多得多,亏得操纵体系已经帮我们办理这个题目了,在Linux操纵体系中,Linux会将磁盘中的一些数据读取到内存傍边,我们称之为内存页。当必要读写硬盘的时辰,都优先在内存页中举办处理赏罚。读的话各人较量好领略,就是缓存嘛,写的话假如只写在缓存没有落盘不是会形成脏数据么?简直云云,只有当脏页达到必然比例之后,Linux操纵体系才会把数据刷到磁盘傍边。在呆板产生掉电的时辰,简直会呈现脏数据。可是,我们更应该行使漫衍式写到多台呆板上来从基础上办理这个题目。 而且,写在内存页的其它一个甜头是镌汰应用内存的行使,我们都知道Apache Kafka是用Java说话编写的,不得一直止的即是Java的GC题目,跟着应用内存的增多,垃圾接纳的时刻会更多,带来整体机能的降落。 零拷贝技能的行使 作为一个动静体系,不行停止的即是动静的拷贝,通例的操纵,一条动静,必要从建设者的socket到应用,再到操纵体系内核,然后才气落盘。同样,一条动静发送给斲丧者也要从磁盘到内核到应用再到接管者的socket,中间颠末尾多次不是很有须要的拷贝。 在Linux操纵体系中,同样为我们提供了零拷贝技能,零拷贝技能并非真的不消拷贝,而是大大地镌汰了拷贝次数。举个例子,本来从磁盘到吸取者Socket中,必要见过内核态,又要颠末Apache Kafka应用,那么有没有也许直接越过这两层状态,到达更少的拷贝次数呢?Java 的NIO库,帮我们实现了这统统,借用JavaNIO库封装的API,我们可以直接行使Linux操纵体系的零拷贝技能,让体系更快。 总结 以上三点,即是Apache Kafka固然行使了硬盘存储,可是如故可以速率很快的缘故起因,虽然,除此之外,Apache Kafka尚有许多特征让他很快,假如你有乐趣,接待各人存眷我,配合进修,配合前进。各人的支持是我继承唠嗑的动力。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |