Kafka-为什么可以高效读写

2024-03-10 21:26:46 浏览数 (1)

代码语言:java复制
顺序写磁盘
Kafka的producer生产数据,需要写入到log文件中,写的过程是追加到文件末端。
顺序写的方式,官网有数据表明,同样的磁盘,顺序写能够到600M/s,而随机写只有200K/s,这与磁盘的机械结构有关,
顺序写之所以快,是因为其省去了大量磁头寻址的时间。

零复制技术:
NIC:Network Interface Controller网络接口控制器

常规的读取操作:
1、操作系统将数据从磁盘文件中读取到内核空间的页面缓存
2、应用程序将数据从内核空间读入到用户空间缓冲区
3、应用程序将读到的数据写回内核空间并放入到socket缓冲区
4、操作系统将数据从socket缓冲区复制到网卡接口,此时数据通过网络发送给消费者

零拷贝技术:
1、将磁盘文件的数据复制到页面缓存中一次,
2、然后将数据从页面缓存直接发送到网络中(发送给不同的订阅者时,都可以使用同一个页面缓存),从而避免了重复复制的操作。
clipboard.pngclipboard.png
代码语言:java复制
kafka = 共享空间(mmap)   零拷贝(sendfile)
clipboard.pngclipboard.png

0 人点赞