在热招的Java架构师岗位面试中,Kafka 面试题被面试官选中的几率非常大,也是HR 的杀手锏和狠招,一般来讲,面试题有以下几种:
- Kafka 为什么这么快?
- 如何对 Kafka 集群进行调优?
- Kafka 的高性能网络架构是如何设计的?
- Kafka 集群资源如何评估?
大多数人遇到这样的问题,脑海中简单构思之后就快速给出了答案:
- Kafka 是基于磁盘顺序写的设计。
- 将 Kafka 的副本因子调大,提高数据的安全性,把生产者程序的 ack 调整为0,提高数据写入的效率等。
- Kafka 的高性能网络架构设计方案包含批处理,高效的序列化方式。
- Kafka 的集群资源评估主要看 topic 的数量以及每个 topic 的数据量规模。
那么,避免踩坑,应该怎么回答面试官的问题呢?别着急,我来先给大家做个正确示范。
问题:Kafka 为什么那么快?示范如下:
- 首先,Kafka 作为一个消息系统,通过 topic 的方式来管理 message,把这些消息都顺序写入磁盘文件来提高写入速度,其实这些消息并没有实时写入磁盘,而是充分利用了现代操作系统分页存储来利用内存提高IO效率。
- 其次,它的工作原理是直接利用操作系统的 page 来实现文件到物理内存的直接映射。完成映射之后你对物理内存的操作会被同步到硬盘上(操作系统在适当的时候)。
- 再次,Kafka 也基于 sendfile 实现 zero copy,简化网络上和两个本地文件之间的数据传输,sendfile 的引入不仅减少了数据复制,还减少了上下文切换。
- 最后,Kafka 为了能网络上提高传输数据的效率,message 也支持压缩。在很多情况下,系统的瓶颈不是 CPU 或磁盘,而是网络 IO,对于需要在广域网上的数据中心之间发送消息的数据流水线尤其如此。
总结一下:Kafka 速度的秘诀在于,它把所有的消息都变成一个批量的文件,并且进行合理的批量压缩,减少网络 IO 损耗,通过 mmap 提高 IO 速度,写入数据的时候由于单个 partition 是末尾添加所以速度最优;读取数据的时候配合 sendfile 直接暴力输出。
你看,这样的回答,是不是就更全面了?挑不出毛病的满分答案是完全能让面试官眼前一亮的,这样就离接到offer大大向前迈进了一步。
其实,为了更加全面掌握 Kafka 的底层原理,我手打整理出了这份Kafka核心学习手册,内容丰富,全网仅此一份!由于篇幅原因,在这就展示文档目录截图及内容展示给大家,有需要的朋友麻烦转发此文后点击文末下方传送门,即可获取Kafka核心高清手册笔记文档的免费领取方式了!
第一章节:Kafka入门及概念
主要内容包括:消息和批次,主题和分区,生产者和消费者、偏移量、消费者群组,Broker和集群,保留消息
第二章节:Kafka的安装、管理和配置及为什么选择
主要内容包括:Kafka优点,常见场景,安装,Broker配置,硬件配置对Kafka性能的影响
第三章节:Kafka的集群
第四章节:Kafka的生产者和Kafka的消费者
主要内容包括:生产者发送消息的基本流程,使用Kafka生产者序列化,分区,消费者的入门,消费者中的基础概念,消费者中的核心概念,Kafka中的消费安全,消费者提交偏移量导致的问题,分区再均衡,优雅退出,反序列化,独立消费者
第五章节:深入理解Kafka
主要内容有:集群的成员关系,什么是控制器,复制-Kafka的核心,处理请求的内部机制,物理存储机制
第六章节:可靠的数据传递
主要内容包括;Kafka提供的可靠性保证和架构上的权衡,复制,Broker配置对可靠性的影响,可靠系统里的生产者,可靠系统里的消费者
第七章节:Spring及SpringBoot和Kafka的整合
第八章节:Kafka实战之削峰填谷和数据管道和流式处理
如何获取完整文档?
转发此文后点击文末下方传送门,即可获取Kafka核心高清手册笔记文档的免费领取方式了!由于篇幅原因,在这就展示文档内容截图给大家,有需要的朋友赶紧来获取吧!
版权归原作者 不会敲代码的谌 所有, 如有侵权,请联系我们删除。