Kafka 如何实现每秒几十万消息的写入?

总所周知,Kafka是高吞吐低延迟的高并发、高性能的分布式消息中间件,它还具有横向扩展,容错等优点,主要用于处理活跃的流式数据,在大数据领域有极为广泛的运用。配置良好的Kafka集群甚至可以做到每秒几十万、上百万的超高并发写入。

Kafka为什么这么快?

大家都知道Kafka会把收到的消息都写入到硬盘中。那么问题来了?写磁盘速度难道会快吗?这是作弊啊?

没错,Kafka就是作弊了。。。。为了优化写入速度Kafak采用了两个技术,顺序写入和MMAP。

顺序写磁盘

也就是说,Kafka仅仅将数据追加到文件的末尾,不是在文件的随机位置来修改数据。新来的消息只能追加到已有消息的末尾,并且消息不支持随机删除以及随机访问,但是消费者可以通过重置offset的方式来访问已经消费过的数据。

普通的机械磁盘如果你要是随机写的话,确实性能极差,也就是随便找到文件的某个位置来写数据。

但是如果你是追加文件末尾按照顺序的方式来写数据的话,那么这种磁盘顺序写的性能基本上可以跟写内存的性能本身也是差不多的。

即使顺序读写,过于频繁的小I/O操作一样会造成磁盘的瓶颈,所以Kafka在此处的处理是把这些消息集合在一起批量发送,这样减少对磁盘IO的过度读写,而不是一次发送单个消息。

MMAP

操作系统本身有一层缓存,叫做page cache,是在内存里的缓存,这个缓存是操作系统自己管理的。

Kafka的数据并不是实时的写入硬盘,它充分利用了现代操作系统分页存储来利用内存提高I/O效率。

MMAP(Memory Mapped Files,内存映射文件)技术。它可以直接利用操作系统的页缓存来实现文件到物理内存的直接映射。完成映射之后对物理内存的操作在适当时候会被同步到硬盘上。

kafka在写入磁盘文件的时候,可以直接写入这个page cache里,相当于是在写内存,接下来由操作系统异步把page cache里的数据真的刷入磁盘文件中。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值