Kafka高并发如何实现写入每秒几十万上百万并发
2019-05-22 本文已影响29人
小小毛同学
1,做的是linux系统的页缓存技术
2,磁盘的顺序写
3,零拷贝技术
下面开始详细的介绍这三种技术
1,做的是linux系统的页缓存技术
linux操作系统本身有一层缓存,叫做 Page Cache,是在内存里的缓存,我们也可以称之为 OS Cache,意思就是操作系统自己管理的缓存。
你在写入磁盘文件的时候,可以直接写入这个 OS Cache 里,也就是仅仅写入内存中,接下来由操作系统自己决定什么时候把 OS Cache 里的数据真的刷入磁盘文件中。
![](https://img.haomeiwen.com/i4175278/4e2cb8fe17c8f21e.png)
2,磁盘的顺序写
普通的机械磁盘如果你要是随机写的话,确实性能极差,也就是随便找到文件的某个位置来写数据。
但是如果你是追加文件末尾按照顺序的方式来写数据的话,那么这种磁盘顺序写的性能基本上可以跟写内存的性能本身也是差不多的。
它是采用磁盘顺序写的方式,所以即使数据刷入磁盘的时候,性能也是极高的,也跟写内存是差不多的。
基于上面两点,Kafka 就实现了写入数据的超高性能
3,零拷贝技术
这个技术主要是应用在数据的读的时候。如果kafka的数据在内存中,是用不到这种技术的,在读数据的时候直接从内存中拿就可以了。
![](https://img.haomeiwen.com/i4175278/94bf82ecde47fb9a.png)
如果数据在磁盘中,就需要先拿到内存中,再到kafka的消费者中。如果使用这种技术就直接在内存中,把数据的文件符拷贝到sorket中,直接给消费者就可以了。
![](https://img.haomeiwen.com/i4175278/460985bc3f40ed14.png)
参考链接:http://www.aboutyun.com/forum.php?mod=viewthread&tid=27191