【Kafka总结】Kafka 高效读写数据的原理

问题提出

Kafka通过磁盘来读写数据,一般来说依靠磁盘读写数据的速度远比依靠内存慢,但Kafka拥有高效读写数据的特点,这是怎么做到的呢?

原理分析

1.顺序写磁盘

Kafka producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端,
为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s ,而随机写只有 100K/s 。这
与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。

2.零拷贝技术

一般来说,文件的读写操作需要经过下图的过程:

【Kafka总结】Kafka 高效读写数据的原理_第1张图片

但Kafka实现零拷贝技术,直接在操作系统层面就完成了文件的操作,如下图:

【Kafka总结】Kafka 高效读写数据的原理_第2张图片

 3.分段日志+索引文件

分段日志是通过数据的偏移量进行存储,索引文件是能快速定位所要查询数据的位置

1、Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,
减少磁盘占用。
2、通过索引信息可以快速定位message和确定response的最大大小。
3、通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。
4、通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。

4.批量发送

kafka允许进行批量发送消息,producer发送消息的时候,可以将消息缓存在本地,等到了固定条件发送到kafka
    1. 等消息条数到固定条数
    2. 一段时间发送一次

5.压缩数据

 Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩
压缩的好处就是减少传输的数据量,减轻对网络传输的压力
批量发送和数据压缩一起使用效果最好,单条做数据压缩的话,效果不明显。

参考:

Kafka 高效读写数据的原因_潘书鹏的BigData的博客-CSDN博客

你可能感兴趣的:(Kafka,kafka,分布式,zookeeper,大数据,big,data)