Kafka的高速磁盘访问能力是如何实现的?

2019-05-20  本文已影响0人  鸿雁长飞鱼龙潜跃

Kafka的高速磁盘访问能力是如何实现的?

我们知道,Kafka有以下特性:

时间复杂度O(1)的方式提供消息持久化能力,即使对TB以上的数据也能保证常数时间的访问性能。

如何实现的呢?

概括来说,有以下三点:

1,磁盘线性写入,或者从Kafka应用程序的角度来说是消息顺序追加。

怎么理解呢?什么是磁盘线性写入?什么是消息顺序追加?

磁盘的读写分为随机读写和线性读写。线性读写的效率比随机读写快6000倍。Kafka在设计时采用了文件追加的方式来写入消息,即只能在日志文件的尾部追加新的消息,并且不允许修改已经写入的消息。这样就可以利用磁盘的线性读写来提高磁盘访问速度。

2,磁盘页缓存

什么是页缓存?

页缓存是磁盘缓存。

页缓存是操作系统实现的磁盘缓存。

页缓存的目的是为了减少对磁盘的IO操作。

具体来说就是把磁盘的数据缓存到内存中,把对磁盘的访问变成对内存的访问。Kafka中大量使用了页缓存,这是Kafka实现高吞吐的关键因素之一。

3,零拷贝

什么是零拷贝?

零拷贝是一种避免CPU将数据从一块存储拷贝到另外一块存储的技术。零拷贝可以有效的改善数据传输的性能,在内核驱动程序处理IO数据的时候,零拷贝技术可以在某种程度上减少不必要的CPU拷贝操作。

上一篇 下一篇

猜你喜欢

热点阅读