Kafka 性能为什么比 RocketMQ 好

ops/2024/9/23 14:35:53/

Kafka 性能更好的原因

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

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

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

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

ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t count);
// num = sendfile(xxx);
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__25">kafka 和 RocketMQ 怎么选?

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

  • 如果是大数据场景,比如你能频繁听到 spark,flink 这些关键词的时候,那就用 kafka
  • 除此之外,如果公司组件支持,尽量用 RocketMQ。

http://www.ppmy.cn/ops/97632.html

相关文章

Table API SQL之时区Time Zone详解

目录 数据类型 日期和时间(Date and Time) 日期(DATE) 时间(TIME) 时间戳(TIMESTAMP) 无时区时间戳 有时区时间戳 本地时区时间戳(TIMESTAMP_LTZ) 区间年月(INTERVAL YEAR TO MONTH) 区间日秒(INTERVAL DAY TO SECOND) 时区(Time Zone) TIMESTAMP类…

windows docker 执行apt-get 权限问题

今天在windows下安装的docker 部署的容器执行apt-get遇到权限问题 PS C:\Users\xiaok> docker exec -it jenkins sh $ apt-get update Reading package lists... Done E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to l…

GPT-4o微调功能现已上线

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Button窗口部件

# 2. Button窗口部件 # 简单说明: # Button(按钮)部件是一个标准的Tkinter窗口部件,用来实现各种按钮。按钮能够包含文本或图象, # 并且你能够将按钮与一个Python函数或方法相关联。当这个按钮被按下时,Tki…

【Docker】gitea的ssh容器直通

本文首发于 ❄️慕雪的寒舍 1.跟着文档走 gitea的安装比较简单,直接使用官方文档中的docker-compose文件即可。如果想实现ssh容器直通,需要对这个docker-compose文件做一定修改。 如果你还没有安装docker,参考本站教程 linux安装docker&…

水库大坝安全监测:筑起水坝安全防线

水库大坝安全监测集成了多种传感器、数据采集、传输和处理技术等技术手段,通过在坝体、库区等关键位置设立传感器,来实现水库大坝实时监测的水平位移、垂直位移,这样能够及时发现潜在的安全隐患和异常情况,以便于大坝管理人员能够…

Vue3 目录结构 3

Vue 3 项目的目录结构可以根据需要进行调整,但是下面是一个基本的目录结构: my-vue3-app/ app/ components/ HelloWorld.vue ... views/ Home.vue ... App.vue main.js public/ index.html ... src/ api/ ... assets/ ... computed/ ... methods/ ... m…

【esp32程序编译提示undefined reference to ‘xxxx‘】

案例1: 【背景】 在使用SquareLine Studio设计UI时,成功导出UI代码,在编译代码的时候提示undefined reference to ‘ui_img_1869164015’,有一个变量无法识别,没有定义。 【定位步骤】 1.首先找到用这个变量的.c文件…