Kafka高吞吐低延迟原理

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

顺序读写

  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空间内存。这样做的好处有:

  1. 避免Object消耗:如果是使用 Java 堆,Java对象的内存消耗比较大,通常是所存储数据的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值