顺序读写
Kafka将消息记录持久化到本地磁盘中,实际上不管是内存还是磁盘,快或慢关键在于寻址的方式,磁盘分为顺序读写与随机读写,内存也一样分为顺序读写与随机读写。基于磁盘的随机读写确实很慢,但磁盘的顺序读写性能却很高。
Kafka使用磁盘顺序读写来提升性能,Kafka的message是不断追加到本地磁盘文件末尾的,而不是随机的写入,这使得Kafka写入吞吐量得到了显著提升 。每一个Partition其实都是一个文件 ,收到消息后Kafka会把数据插入到文件末尾。
这种方法不能删除数据 ,所以Kafka是不会删除数据的,它会把所有的数据都保留下来,每个消费者(Consumer)对每个Topic都有一个offset用来表示 读取到了第几条数据 。

两个消费者,Consumer1有两个offset分别对应Partition0、Partition1(假设每一个Topic一个Partition);Consumer2有一个offset对应Partition2。这个offset是由客户端SDK负责保存的,一般情况下SDK会把它保存到zookeeper里面。
如果不删除硬盘肯定会被撑满,所以Kakfa提供了两种策略来删除数据。一是基于时间,二是基于partition文件大小。
Page Cache
Page Cache
为了优化读写性能,Kafka利用了操作系统本身的Page Cache,即利用操作系统自身的内存而不是JVM空间内存。这样做的好处有:
- 避免Object消耗:如果是使用 Java 堆,Java对象的内存消耗比较大,通常是所存储数据的

本文详细介绍了Kafka实现高吞吐低延迟的原理,包括顺序读写、Page Cache利用、零拷贝机制、分区分段+索引、批量读写和批量压缩。顺序读写保证了磁盘操作的高效,Page Cache减少了内存消耗和GC问题,零拷贝通过sendfile减少数据传输中的拷贝操作,分区分段+索引优化了数据查询,批量读写和压缩则降低了网络IO和带宽开销。
最低0.47元/天 解锁文章
643

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



