Kafka 性能为什么比 RocketMQ 好

Kafka 性能更好的原因

因为 kafka 零拷贝技术跟 RocketMQ 的不一样。

  • kafka 零拷贝技术使用的是 sendfile+DMA scatter/gather 。只需要经过 2 次拷贝,2 次上下文切换
  • RocketMQ 零拷贝使用的 mmap 内存映射,需要经过 3 次拷贝,4 次上下文切换。

零拷贝相关知识可以移步零拷贝详解_0cpu拷贝-CSDN博客

那么为什么 RocketMQ 不适用 sendfile 呢?

java 复制代码
ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count);
// num = sendfile(xxx);
java 复制代码
void *mmap(void *addr, size_t length, int prot, int flags,
           int fd, off_t offset);
// buf = mmap(xxx)

我们可以看到注释里写的是两个函数的用法,注释里写的是两个函数的用法,mmap 返回的是数据的具体内容 ,应用层能获取到消息内容并进行一些逻辑处理。

sendfile 返回的则是发送成功了几个字节数具体发了什么内容,应用层根本不知道

而 RocketMQ 的一些功能,却需要了解具体这个消息内容,方便二次投递等,比如将消费失败的消息重新投递到死信队列中,如果 RocketMQ 使用 sendfile,那根本没机会获取到消息内容长什么样子,也就没办法实现一些好用的功能了。

而 kafka 却没有这些功能特性,追求极致性能,正好可以使用 sendfile。

除了零拷贝以外,kafka 高性能的原因还有很多,比如什么批处理,数据压缩啥的,但那些优化手段 rocketMQ 也都能借鉴一波,唯独这个零拷贝,那是毫无办法。

kafka 和 RocketMQ 怎么选?

这时候大家估计还是想知道 kafka 和 RocketMQ 到底该怎么选,用哪个。

  • 如果是大数据场景,比如你能频繁听到 spark,flink 这些关键词的时候,那就用 kafka。
  • 除此之外,如果公司组件支持,尽量用 RocketMQ。
相关推荐
代码改善世界1 小时前
【前瞻创想】Kurator:驾驭分布式云原生世界的“统一舰队”
分布式·云原生
行走正道1 小时前
【前瞻创想】标准之争:论Kurator在分布式云原生API标准化中的潜在角色
分布式·api·kurator·标准化·策略驱动
代码改善世界1 小时前
【探索实战】从零到一:Kurator 构建分布式云原生平台的探索与实践
分布式·云原生
9***Y482 小时前
后端在分布式中的Apache Kafka
分布式·kafka
yumgpkpm2 小时前
腾讯TBDS和Cloud Data AI CMP 比较的缺陷在哪里?
hive·hadoop·elasticsearch·zookeeper·spark·kafka·hbase
huisheng_qaq2 小时前
【RocketMq源码篇-03】dashboard安装搭建和启动详解(集群版)
rocketmq·rocketmq集群·rocketmq源码·dashboard可视化界面·mq中间件
初学者,亦行者3 小时前
【前瞻创想】集成与创新并举,引领分布式云原生新范式
分布式·云原生
i***58673 小时前
【RabbitMQ】超详细Windows系统下RabbitMQ的安装配置
windows·分布式·rabbitmq
小马过河R3 小时前
tRPC-GO 框架Helloworld实践初体验
开发语言·分布式·后端·架构·golang·gin·beego
小小工匠3 小时前
大规模数据处理:12_Kappa架构剖析与Kafka在大规模流式数据处理中的应用实践
架构·kafka·kappa