Kafka高效读写数据原理

Kafka能够实现高效的数据读写,主要是有下面一些原因:

顺序写磁盘

  当kafka接收到生产者传递过来的消息后,kafka是直接将数据追加到log文件中的,属于顺序写文件,对于同样的磁盘来说顺序写文件的效率要大大高于随机写文件。

应用Pagecache

  kafka将数据直接持久化到pagecache中,其实就是内存中,这样有几个优点:

  • I/O Scheduler可以将多个小块的写组装成大块的写操作,降低了I/O次数
  • 利用空闲内存(非JVM内存),这样可以减少JVM的GC操作
  • 消费者可以直接从pagecache中消费数据,如果生产和消费的速率相同,甚至可以不走磁盘来交换数据

  由于副本机制的存在,数据持久化到pagecache中也不用担心数据丢失。

零拷贝技术

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

你可能感兴趣的:(Kafka,大数据,kafka)