kafka为什么那么快?

Kafka把所有消息都变成一个批量的文件,并且进行合理的批量压缩,减少网络IO损耗。写数据的时候由于单个Partion是末尾添加所以速度最优,同时通过Memory Mapped Files提高I/O速度,读数据的时候使用sendfile提高效率。

kafka的消息是保存或缓存在磁盘上的,即使是普通的服务器,Kafka也可以轻松支持每秒百万级的写入请求,远超大部分的消息中间件。

为什么不适用内存存储?

kafka是由Scala和Java编写的,如果使用内存做存储的话虽然效率高,但是需要解决两个问题

1)JAVA对象的内存开销

2)java的gc

使用磁盘的话,可以很好的避免以上两点问题,在使用顺序读写的情况下保持可效率,同时解决了内存开销和gc问题,最重要的是一旦机器重启后不会丢失数据。

下面从读写两个方面分别分析下kafka为什么这么快

一、写数据

Kafka把收到的消息都写入到硬盘中(不会丢失数据),之所以能够提高kafka优化写入效率,kafka采取了以下几种方法。

顺序写入

因为硬盘是机械结构,每次读写都会寻址(最耗时)->写入,所以硬盘最讨厌随机I/O,最喜欢顺序I/O。为了提高读写硬盘的速度,Kafka就是使用顺序I/O。在顺序读写的情况下,某些优化场景磁盘的读写速度可以和内存持平。

对于kafka来说,每一个Partition其实都是一个文件 ,收到消息后Kafka会把数据插入到文件末尾。

不维护数据的状态

kafka不维护信息的状态,每个消费者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值