rocketmq 是参考了 kafka架构, 为什么rocketmq吞吐量是10万/秒, kafka吞吐量是17万/秒?

我们都知道, 为了防止消息在服务器丢失, 一般都是进行持久化(保存在磁盘), 在发送消失时那就涉及到从磁盘拷贝到内核空间, 从内核空间到用户态, 再从用户态到socket缓存区, 从socket缓存区到网卡 四次拷贝。

kafka使用的是零拷贝-sendfile, 把内核态数据发送到网卡, 减少两次拷贝,

而rocketmq使用的是零拷贝-mmp, 把内核态数据映射到用户态, 只减少一次拷贝,

所以kafka吞吐量会大一些。

为什么rocketmq要用mmp?

因为mmp 在用户态的应用程序可以读到 消息内容 并做一些额外功能(把消息加到死信队列, 补发消息)。

这是用sendfile不行的

总结:没有完美的架构, 很难做到既要, 又要, 牺牲一部分能力换取另一部分, 从而适应不同场景需求

传统文件传输

mmp (映射 减少一次拷贝 rocketmq用了)

sendfile(kafka用了)

图来源于 小林coding 参考: 9.1 什么是零拷贝? | 小林coding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值