|NO.Z.00068|——————————|BigDataEnd|——|Hadoop&kafka.V53|——|kafka.v53|磁盘存储|零拷贝/页缓存/顺序写入.v03|
一、 磁盘存储:顺序写入
### --- 顺序写入
~~~ 操作系统可以针对线性读写做深层次的优化,
~~~ 比如预读(read-ahead,提前将一个比较大的磁盘块读入内存) 和后写(write-behind,
~~~ 将很多小的逻辑写操作合并起来组成一个大的物理写操作)技术。
~~~ Kafka 在设计时采用了文件追加的方式来写入消息,即只能在日志文件的尾部追加新的消 息,
~~~ 并且也不允许修改已写入的消息,这种方式属于典型的顺序写盘的操作,
~~~ 所以就算 Kafka 使用磁盘作为存储介质,也能承载非常大的吞吐量。

### --- mmap和sendfile:
~~~ 1. Linux内核提供、实现零拷贝的API;
~~~ 2. sendfile 是将读到内核空间的数据,转到socket buffer,进行网络发送;
~~~ 3. mmap将磁盘文件映射到内存,支持读和写,对内存的操作会反映在磁盘文件上。
~~~ 4. RocketMQ 在消费消息时,使用了 mmap。kafka 使用了 sendFile。
### --- Kafka速度快是因为:
~~~ 1. partition顺序读写,充分利用磁盘特性,这是基础;
~~~ 2. Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入;
~~~ 3. Customer从broker读取数据,采用sendfile,将磁盘文件读到OS内核缓冲区后,
~~~ 直接转到socket buffer进行网络发送。
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv013-kafka
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通