1. 顺序写磁盘
Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁 盘,顺序写能到600M/s,而随机写只有100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的 时间。
2. 分段日志 + 索引文件
分段日志是通过数据的偏移量进行存储,索引文件是能快速定位所要查询数据的位置 1、Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件, 减少磁盘占用。 2、通过索引信息可以快速定位message和确定response的最大大小。 3、通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。 4、通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。
3. 零拷贝
如下图所示是普通Java读取复制文件的一个流程
Java程序是无法直接操作硬件的,所以Java想要操作文件的话必须得通过操作系统去读取文件。这时就会涉及大量 的读写缓存,因为我们发送数据的时候不可能1kb的发,因此只能先缓存起来,这必定会涉及到大量的IO操作,由此可见 这样的效率并不是非常高的。
零拷贝
1.在Kafka中我们的Java程序并不需要文件的内容,所以Kafka就使用了零拷贝的技术,因此Kafka当中的数据直接缓存在 操作系统当中,我们读也在这里读 写也在这里写,这样的效率提高了许多 2.所谓的零拷贝并不是真正意义上的零拷贝 实际上是缓存了一次,只是相对于普通Java读取复制文件少了许多中间的缓存
4. Page Cache
由上图可见 1. 传统的数据传输是先将数据缓存在内存当中,当数据达到一定的阈值再写入到文件中。 2. Page Cache 是在操作系统开了一个内存将数据直接缓存到系统内存中。 3. 虽然将数据缓存到Page Cache中会比直接缓存到Memory中效率更低,但是当数据量达到一定的阈值的时候Memory会对 缓存中的数据进行溢写,这样的效率就会比直接写入Page Cache会更低,因为Page Cache对文件进行读写操作效率是非常 高的,而Memory对数据进行溢写这时就需要请求操作系统,所以这样的效率会比Page Cache对文件的读写操作效率低很多。 4. 缓存到Memory我们JVM所分配到的内存是有限的,而Page Cache是利用操作系统的内存。
5. 批量发送
kafka允许进行批量发送消息,producter发送消息的时候,可以将消息缓存在本地,等到了固定条件发送到kafka 1. 等消息条数到固定条数 2. 一段时间发送一次
6. 数据压缩
Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩 压缩的好处就是减少传输的数据量,减轻对网络传输的压力 批量发送和数据压缩一起使用效果最好,单条做数据压缩的话,效果不明显
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算