放荡的人生|面试题详解:Kafka为什么能那么快的6个原因( 四 )
- buffer = File.read
- Socket.send(buffer)
- 首先通过系统调用将文件数据读入到内核态 Buffer(DMA 拷贝)
- 然后应用程序将内存态 Buffer 数据读入到用户态 Buffer(CPU 拷贝)
- 接着用户程序通过 Socket 发送数据时将用户态 Buffer 数据拷贝到内核态 Buffer(CPU 拷贝)
- 最后通过 DMA 拷贝将数据拷贝到 NIC Buffer
Kafka 在这里采用的方案是通过 NIO 的 transferTo/transferFrom 调用操作系统的 sendfile 实现零拷贝 。 总共发生 2 次内核数据拷贝、2 次上下文切换和一次系统调用 , 消除了 CPU 数据拷贝
5. 批处理在很多情况下 , 系统的瓶颈不是 CPU 或磁盘 , 而是网络IO 。
因此 , 除了操作系统提供的低级批处理之外 , Kafka 的客户端和 broker 还会在通过网络发送数据之前 , 在一个批处理中累积多条记录 (包括读和写) 。 记录的批处理分摊了网络往返的开销 , 使用了更大的数据包从而提高了带宽利用率 。
6. 数据压缩Producer 可将数据压缩后发送给 broker , 从而减少网络传输代价 , 目前支持的压缩算法有:Snappy、Gzip、LZ4 。 数据压缩一般都是和批处理配套使用来作为优化手段的 。
小总结 | 下次面试官问我 kafka 为什么快 , 我就这么说
- partition 并行处理
- 顺序写磁盘 , 充分利用磁盘特性
- 利用了现代操作系统分页存储 Page Cache 来利用内存提高 I/O 效率
- 采用了零拷贝技术
- Producer 生产的数据持久化到 broker , 采用 mmap 文件映射 , 实现顺序的快速写入
- Customer 从 broker 读取数据 , 采用 sendfile , 将磁盘文件读到 OS 内核缓冲区后 , 转到 NIO buffer进行网络发送 , 减少 CPU 消耗
- 人生若无悔|美俄只能排第二第三,第一实属难料,让日本最忌惮的四个国家
- 蓝小姐和黄小姐|清单||人生最小的奇迹就是遇上美物
- 上海交通大学|人生赢家!他25岁读上海交大博士,妻子漂亮,带娃科研两不误
- 北京大学|重磅:北京大学2020强基计划数学校测试题及答案,学子:难哭了!
- 净利润|股市乱谈:今年所有炒股的人都会成为人生赢家?
- 「高晓松」高晓松:人到中年,迈过这三道坎儿,才能晚年多福
- 嗨的人生 诺基亚将于8月4日10点发布一款新机,C3亮相
- 许某某|大批租户搬离杭州杀妻案公寓没人敢在晚上出来散步 深挖男主人生
- 吉娜|“上综艺体验不一样的人生”
- 【】多地进入“炙烤模式” 高温下他们书写劳动人生