当前位置: 首页 > news >正文

kafka高性能的底层原理分析

目录

1.磁盘顺序写

2.零拷贝

3.数据压缩

4.消息批量处理

5.pageCache

6.稀疏索引

总结


Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。那么他是如何做到高性能的呢,本篇文章从宏观上分析一下,具体细节后续文章会持续更新,欢迎大家捧场阅读,希望能对你有所帮助。

1.磁盘顺序写

我们都知道,磁盘的随机IO非常慢, 7200rpm SATA RAID-5 顺序写速度可达 600MB/sec ,但是随机写速率 100k/sec,相差6000倍,kafka消息写入采用了顺序写。

2.零拷贝

传统的数据传输,需要经历用户态和内核态的4次切换,4次数据copy,如图

        零拷贝,带有 DMA 收集拷贝功能的 sendfile 实现的 I/O使用了2次用户空间与内核空间的上下文切换,2次数据的拷贝,而且这2次的数据拷贝都是非CPU拷贝,这样就实现了最理想的零拷贝I/O传输了,不需要任何一次的CPU拷贝即数据直接从内核缓冲区 copy 到网卡。如下图

3.数据压缩

     支持压缩算法,如Gzip,Snappy,Lz4,Zstd。

     压缩流程:Producer 压缩,broker 保持,consumer解压缩

4.消息批量处理

     producer发送消息给broker,消息在producer端等待达到batch.size (默认值16k)时,才会发       送至broker端,减少网络IO,提升效率 

5.pageCache

        数据写入和读取时,调用了linux底层的sendfile机制,pageCache 页缓存通常是4k,用于提            高文件的读写效率的缓存页。

6.稀疏索引

        日志文件类型:.log文件,index.log,timeIndex.log

        索引文件目的是在高效查找分区内的位置,通过二分查找算法实现

总结

        以上是从整体上总结了kafka支持高性能的6点原因,我们先从宏观上有个清晰的认知

具体每个原因的具体内部技术细节,后期会慢慢给大家分析

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 若依ruoyi+AI项目二次开发(智能售货机运营管理系统)
  • 0719_驱动1 arm裸机开发与linux驱动开发区别
  • centos7安装redis数据库步骤
  • 数据库编程中游标 连接 commit 字符集
  • 键盘是如何使用中断机制的?当打印一串字符到显示屏上时发生了什么???
  • 【科大讯飞笔试题汇总】2024-07-27-科大讯飞秋招提前批(研发岗)-三语言题解(Cpp/Java/Python)
  • 数据结构:单链表的实现
  • 大疆创新2025校招内推
  • LeeCode Practice Journal | Day25_Backtracking04
  • iOS 创建一个私有的 CocoaPods 库
  • Python3网络爬虫开发实战(2)爬虫基础库
  • Csrf复习(pikachu靶场和防御手段)
  • Linux——手动清理内存缓存
  • CSS、less、 Sass、
  • 前端canvas——赛贝尔曲线
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • AngularJS指令开发(1)——参数详解
  • ES学习笔记(12)--Symbol
  • gf框架之分页模块(五) - 自定义分页
  • JavaScript新鲜事·第5期
  • MySQL主从复制读写分离及奇怪的问题
  • PAT A1050
  • PHP那些事儿
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 编写符合Python风格的对象
  • 机器学习 vs. 深度学习
  • 今年的LC3大会没了?
  • 蓝海存储开关机注意事项总结
  • 前端自动化解决方案
  • 区块链技术特点之去中心化特性
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 思否第一天
  • 算法系列——算法入门之递归分而治之思想的实现
  • 鱼骨图 - 如何绘制?
  • Hibernate主键生成策略及选择
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • "无招胜有招"nbsp;史上最全的互…
  • # Redis 入门到精通(九)-- 主从复制(1)
  • (11)MATLAB PCA+SVM 人脸识别
  • (12)Linux 常见的三种进程状态
  • (2)STM32单片机上位机
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (四)模仿学习-完成后台管理页面查询
  • (算法)Travel Information Center
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)IOS中获取各种文件的目录路径的方法
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)