Kafka能够实现高效的数据读写,主要是有下面一些原因:
顺序写磁盘
当kafka接收到生产者传递过来的消息后,kafka是直接将数据追加到log文件中的,属于顺序写文件,对于同样的磁盘来说顺序写文件的效率要大大高于随机写文件。
应用Pagecache
kafka将数据直接持久化到pagecache中,其实就是内存中,这样有几个优点:
- I/O Scheduler可以将多个小块的写组装成大块的写操作,降低了I/O次数
- 利用空闲内存(非JVM内存),这样可以减少JVM的GC操作
- 消费者可以直接从pagecache中消费数据,如果生产和消费的速率相同,甚至可以不走磁盘来交换数据
由于副本机制的存在,数据持久化到pagecache中也不用担心数据丢失。
零拷贝技术

kafka需要将本地磁盘的数据通过网络发送给消费者,传统方式通过网络发送数据需要将文件先加载入内核态的pagecache中,然后加载入程序application cache中,程序决定将数据发送给哪台机器,将文件加载入socket cache中,然后将数据通过网卡发送出去。这种方式一个文件会被拷贝三份才能发送出去。
零拷贝则是文件只需要经过pagecache就可以直接发送出去了。这样就极大的增加了发送数据的效率。

1094

被折叠的 条评论
为什么被折叠?



