|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

 

 

posted on   yanqi_vip  阅读(25)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示