kafka为什么这么快

1、分区策略

(1) Topic中可存在多个Partition
(2) 消息是以日志的方式,记录到每个分区。在磁盘中每个Partition单独一个文件夹用于存储该发送到该分区的消息。
(3)程序可以并行将消息写入多个分区文件。

2、顺序读写

日志文件的读写采用了顺序读取方式,极大的提高读写性能。

3、零拷贝技术

常规拷贝技术
在这里插入图片描述
零拷贝技术
在这里插入图片描述
以两图对比,可以发下零拷贝技术减少了用户缓冲区这个中转过程,直接从分页缓存拷贝到了socket缓冲区,一切都发生在内核空间。,加快了文件的拷贝速度。

4、充分利用 Page Cache

kafka首先将消息写入分页缓存(pagecache),然后再由操作系统负责具体的刷新到磁盘的操作,kafka提供可同步刷盘和间歇性强制刷盘(fsync)
的选择,可以通过log.flush.interval.messages、log.flush.interval.ms来设置。

5、批量读写

例如下图的生产者架构
在这里插入图片描述
发送消息时,并不是一条一条发送,而是将每个分区的消息累加到一定量在发送,批量操作减少网络连接和网络延时的问题。

6、批量压缩

在很多情况下,系统的瓶颈不是CPU或磁盘,而是网络IO,对于需要在广域网上的数据中心之间发送消息的数据流水线尤其如此。进行数据压缩会消耗少量的CPU资源,不过对于kafka而言,网络IO更应该需要考虑。

如果每个消息都压缩,但是压缩率相对很低,所以Kafka使用了批量压缩,即将多个消息一起压缩而不是单个消息压缩
Kafka允许使用递归的消息集合,批量的消息可以通过压缩的形式传输并且在日志中也可以保持压缩格式,直到被消费者解压缩
Kafka支持多种压缩协议,包括Gzip和Snappy压缩协议
Kafka速度的秘诀在于,它把所有的消息都变成一个批量的文件,并且进行合理的批量压缩,减少网络IO损耗,通过mmap提高I/O速度,写入数据的时候由于单个Partion是末尾添加所以速度最优;读取数据的时候配合sendfile直接暴力输出。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值