保证了消息的堆积
顺序读写 磁盘会预读,预读即在读取的起始地址连续读取多个页面,主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。
随机读写 因为数据没有在一起,将预读浪费掉了,需要多次寻道和旋转延迟,而这个时间可能是传输时间的许多倍。
避免CPU将数据从一块存储拷贝到另外一块存储的技术
传统的数据复制:
零拷贝:
磁盘文件 → 内核空间读取缓冲区 → 网卡接口 → 消费者进程
Kafka的message消息实际上是分布式存储在一个一 个小的segment中的,每次文件操作也是直接操作的segment。为了进一步的查询优化, Kafka又 默认为分段后的数据文件建立了索引文件,就是文件系统上的index文件。这种分区分段+索引的设计,不仅提升了数据读取的效率,同时也提高了数据操作的并行度。
多条消息一起压缩,降低带宽
kafka允许进行批量发送消息,producer发送消息的时候,可以将消息缓存在本地,等到固定条件再发送到kafka
消息条数满足固定条数
一段时间发送一次数据压缩
kafka还支持对消息集合进行压缩,producer可以通过GZIP或Snappy格式对消息集合进行压缩,压缩的好处就是减少传输的数据量,减轻对网络传输的压力。
直接操作page cache,不是JVM、避免GC耗时及对象创建耗时,且读写速度更高,进程重启、缓存也不会丢失。