kafka高吞吐量,为什么这么快!

kafka有个很重要的特性,高速的发送和接收消息,超高的吞吐量。这里来讨论一下kafka超高的吞吐量原理:

1. 写:
 页面缓存,顺序写入磁盘。
 producer  ------生产消息----->broker   
 会先将数据先写入到页面缓存(page cache)(基于MMAP)   ----刷盘---》  顺序写入到磁盘(顺序写入比随机的ssd更快)

broker基于MMAP技术,即内存映射文件,将消息先写入到操作系统的页缓存中
2. 读:
零拷贝技术
DMA将数据加载到内核缓冲区, ----sendfile 将内核缓冲区的数据直接发送。
3. partition。
一个topic可以有多个partition,并行处理数据。
4. 批量处理,数据压缩。
producer  ----------生产消息-------->broker
可以设置一定的消息数量 或者时间间隔 再发送数据。减少网络交互。
带宽压力大可以对数据进行压缩。

详细解析 读 和 写操作。

读 (消费者broker----->consumer)

零拷贝并不是说没有一次拷贝,而是减少拷贝的次数。
在消费者模型中,kafka读取消息发送消息:
传统的IO方式(4次 copy过程):
1.将磁盘------》操作系统内核缓冲区。
2.内核缓冲区------》application应用程序的buffer。			(系统调用)
3.application应用程序的buffer ------》socket网络发送缓冲区(内核缓冲区)。	(系统调用)
4.socket buffer -------》网卡(由网卡进行发送)。

在这里插入图片描述
kafka io读取模型:

1.应用指定需要传输的文件句柄和调用sendfile	(系统调用)
2.操作系统在内核读取磁盘文件拷贝到页缓存。	(copy)
3.将页缓存拷贝到网卡。										(copy)

在这里插入图片描述

MMAP

Memory Mapped Files

简称mmap,简单描述其作用就是:将磁盘文件映射到内存, 用户通过修改内存就能修改磁盘文件。
mmap之所以能有效提高kafka的吞吐量,是因为其在进行log文件读取的时候直接将log文件读入用户态进行缓存,绕过了内核态的page cache,避免了内核态和用户态的切换过程

参考:kafka DMA,MMAP,零拷贝

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值