CC00068.kafka——|Hadoop&kafka.V53|——|kafka.v53|磁盘存储|零拷贝/页缓存/顺序写入.v03|

本文介绍了Kafka如何通过顺序写入优化磁盘存储,利用mmap和sendfile实现高效读写,从而实现高吞吐量。Kafka的producer使用mmap进行快速写入,consumer则利用sendfile直接从磁盘传输到网络,减少中间拷贝,提高性能。
一、 磁盘存储:顺序写入
### --- 顺序写入

~~~     操作系统可以针对线性读写做深层次的优化,
~~~     比如预读(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进行网络发送。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值