kafka顺序写入&ZeroCopy

1.为何kafka把消息存在磁盘上,但可以轻松支持每秒百万级的写入请求 / kafka高吞吐率的原因?

kafka为了防止丢失数据,将收到的消息写入磁盘中,但仍能保证高吞吐率,超过了大部分的消息中间件,使得kafka在日志处理等海量数据场景广泛应用。为了优化写入速度kafka采用了顺序写入和MMFile两个技术。

因为硬盘是机械结构,每次读写都会寻址->写入,其中寻址是一个“机械动作”,它是最耗时的。所以硬盘最讨厌随机I/O,最喜欢顺序I/O。为了提高读写硬盘的速度,Kafka就是使用顺序I/O。这样省去了大量的内存开销以及节省了IO寻址的时间。但是单纯的使用顺序写入,Kafka的写入性能也不可能和内存进行对比,因此Kafka的数据并不是实时的写入硬盘中 。

Kafka充分利用了现代操作系统分页存储来利用内存提高I/O效率。Memory Mapped Files也称为内存映射文件,在64位操作系统中一般可以表示20G的数据文件,它的工作原理是直接利用操作系统的Page实现文件到物理内存的直接映射。完成MMP映射后,用户对内存的所有操作会被操作系统自动的刷新到磁盘上,极大地降低了IO使用率。

kafka顺序写入&ZeroCopy_第1张图片

pagecache:实现文件到物理内存的映射,应用把数据写入到内核空间,数据等价得写入到磁盘,操作系统决定什么时候将数据映射到磁盘。

(pageCache实现硬盘与内核级别的内存之间的映射关系,kafka将数据写入到内存,由操作系统决定什么时候将数据映射到磁盘。即使应用程序挂了,但写入到pageCache中的数据仍然存在于内核级别的内存中,由操作系统决定何时写入硬盘。 但pageCache断电会丢失数据)

2.提升消费速度的设计:

kafka在响应用户读取数据的时候,使用zeroCopy技术,没有将数据传输到用户空间,而是直接将数据通过内核空间传递输出,数据没有抵达用户空间。

kafka顺序写入&ZeroCopy_第2张图片

DMA

kafka顺序写入&ZeroCopy_第3张图片 减少CPU处理中断的操作,提升CPU利用率。

 常规IO的四次拷贝;kafka顺序写入&ZeroCopy_第4张图片

 DMA的两次拷贝:kafka顺序写入&ZeroCopy_第5张图片

 

你可能感兴趣的:(Apache,Kafka,kafka)