在热招的大数据架构师岗位面试中,Kafka 面试题被面试官选中的几率非常大,也是HR 的杀手锏和狠招,一般来讲,面试题有以下几种:
1. Kafka 为什么这么快?
2. 如何对 Kafka 集群进行调优?
3. Kafka 的高性能网络架构是如何设计的?
4. Kafka 集群资源如何评估?
大多数人遇到这样的问题,脑海中简单构思之后就快速给出了答案:
1. Kafka 是基于磁盘顺序写的设计。
2. 将 Kafka 的副本因子调大,提高数据的安全性,把生产者程序的 ack 调整为0,提高数据写入的效率等。
3. Kafka 的高性能网络架构设计方案包含批处理,高效的序列化方式。
4. Kafka 的集群资源评估主要看 topic 的数量以及每个 topic 的数据量规模。
这样看似“突出要点式”的简短回答,其实正好不知不觉陷入了几个雷区,我们来分析一下这几个回答究竟踩中了哪些“坑”?
1. 回答太过于简洁,而且不完整,明显感觉不全面,欠思考。
2. 回答不够全面,调优一般基于某种业务场景给出最佳方案,毕竟脱离了业务场景而干谈技术和参数调优,那就是耍流氓呀。
3. Kafka 的网络架构设计,应该从已有方案的痛点,其他类似组件的成功设计方案进行设计参考,这样会显得系统全面。
4. 集群资源评估,除了数据规模一样,也还要考虑副本,考虑压缩,考虑生命周期。
那么,避免踩坑,应该怎么回答面试官的问题呢?别着急,我来先给大家做个正确示范。
问题:Kafka 为什么那么快?
示范如下:
1. 首先,Kafka 作为一个消息系统,通过 topic 的方式来管理 message,把这些消息都顺序写入磁盘文件来提高写入速度,其实这些消息并没有实时写入磁盘,而是充分利用了现代操作系统分页存储来利用内存提高IO效率。
2. 其次,它的工作原理是直接利用操作系统的 page 来实现文件到物理内存的直接映射。完成映射之后你对物理内存的操作会被同步到硬盘上(操作系统在适当的时候)。
3. 再次,Kafka 也基于 sendfile 实现 zero copy,简化网络上和两个本地文件之间的数据传输,sendfile 的引入不仅减少了数据复制,还减少了上下文切换。
4. 最后,Kafka 为了能网络上提高传输数据的效率,message 也支持压缩。在很多情况下,系统的瓶颈不是 CPU 或磁盘,而是网络 IO,对于需要在广域网上的数据中心之间发送消息的数据流水线尤其如此。
总结一下:Kafka 速度的秘诀在于,它把所有的消息都变成一个批量的文件,并且进行合理的批量压缩,减少网络 IO 损耗,通过 mmap 提高 IO 速度,写入数据的时候由于单个 partition 是末尾添加所以速度最优;读取数据的时候配合 sendfile 直接暴力输出。
你看,这样的回答,是不是就更全面了?挑不出毛病的满分答案是完全能让面试官眼前一亮的,这样就离接到offer大大向前迈进了一步。
其实,为了更加全面掌握 Kafka 的底层原理,可以拓展一些相关阅读。我给大家推荐几本书:
《 Kafka 技术内幕》郑奇煌·著
《Apache Kafka 实战》胡夕·著
《深入理解Kafka: 核心设计与实践原理》朱忠华·著
但是大多数程序员在延展学习的时候都遇到了大同小异的问题,不信你看,是不是你也中了招?
1. 大家都被工作压榨的太狠了,996完全没有闲暇时间学习。
2. 读了书中的原理,但却没有一个很好的实际应用案例进行实战。
3. 找不到合理的方法,遇到技巧性的编码就顿时一脸懵逼。
那么,针对有部分自学困难的同学呢,很适合接下来送出的这套免费且互动感十足的视频教程——《Kafka源码深度剖析》。这是我上周刚刚参加过的奈学教育—免费 Kafka进阶训练营,当时报名人数高达12621+人次,现在奈学已经将录播课程资料全部打包,价值近千元的Kafka源码剖析课,现免费赠送!这波羊毛,不薅白不薅,相信你跟我一样,听完干货满满的内容绝对会从容应对面试官的灵魂拷问,让你轻松玩转 Kafka 底层原理!
需要的同学扫码添加课程顾问免费领取喔
动手扫一扫,3秒的时间让你在学习上至少节省1440个小时!
当然,仅仅如此远没有诚意,针对爱看书的小伙伴,接下来这波福利一定不容错过!
6/18 福利大放送
活动介绍:6.18矩惠来袭,【奈学教育】与【当当网】强强联合为大家献上【奈学教育专属优惠码——FKNADA】
活动规则:每购满100元立减50元,叠加实付150元立减30元,即120元尊享300元购物体验!
活动日期:2020/6/15-2020/6/20
快转发你的小伙伴领取专属好礼吧!
<点击原文 更多精彩>