消息队列:Kafka吞吐量为什么比RocketMQ大

根据资料显示RocketMQ每秒能处理10W量级数据,而Kafka能处理17W量级数据。

  • 这两者差别主要再使用的零拷贝技术不一样。

再什么情况下零拷贝技术诞生了

为了防止消息队列中的消息因为各种意外情况丢失,要对消息进行持久化处理,将其存储在磁盘当中。在传统的I/O工作方式中发送消息要经历多次的状态改变和消息拷贝。

从图中可以看到有四次数据拷贝,两次系统调用(),四次状态的切换。对于一个消息的发送需要这么多次拷贝一样的数据。

DMA技术:

之前这些拷贝都需要CPU全程参与,导致再数据传输期间CPU无法完成其他任务。那么如果再大量传输数据时,那么CPU就不用干其他事情了,就一直干着拷贝数据的活,那不完犊子了。所以就有了DMA技术(直接内存访问技术),它允许磁盘等外部硬件设备直接与主内存进行数据交换,而无需中央处理器(CPU)的干预。减低了CPU的负担,此时只需要CPU在 DMA 传输开始之前,设置好 DMA 控制器。这通常涉及到指定源地址、目标地址以及要传输的数据量。后面就由DMA自己控制拷贝就好了。

零拷贝技术实现方式:

1、mmap技术

mmap是操作系统提供的一个内核方法,可以将内核缓冲区映射到用户空间,这样子就可以直接通过操作用户空间映射的部分直接操作内核缓冲区中的消息。就无需将内核缓冲区的数据拷贝到用户缓冲区后再将其拷贝到Socket缓冲区。

映射:页表指向同一块内核地址。

但这个过程还是需要三次的拷贝、四次的状态的切换和两次的系统调用。

2、sendfile技术

sendfile也是内核提供的一个方法,从名字就可以看出它的作用就是发送文件。从发生方法调用开始,由用户态转化为内核态,并将磁盘内的数据拷贝到内核缓冲区,然后直接将内核缓冲区中的数据拷贝到网卡当中,进行消息发送。当然这个直接将内核缓冲区数据直接拷贝到网卡的过程要是 网卡支持SG-DMA技术。

这样子只需要进行一次系统调用、两次拷贝和两次状态转换。

而Kafka使用的就是sendfile(),RocketMQ使用的就是mmap()技术。

为什么RocketMQ不也使用sendfile()技术呢?

sendfile()方法成功时返回已传输的字节数。

int sendfile(int out_fd, in_fd, off_t* offset, int count);
//out_fd:被拷贝文件描述符
//in_fd:拷贝目的文件描述符
//offset: 被拷贝文件偏移量
//count:被拷贝数据长度

mmap()方法返回的是一个指向映射区域的指针。

void * mmap(void*addr,int length,prot,flags,fd,off_t offset);

mmap返回的值可以让应用层获取到消息内容,可以进行一些逻辑处理,但sendfile返回的只是已经传输的字节数,具体发送了什么内容,内容层无法得知。而RocketMQ的一些功能需要具体了解到发送了什么消息才能实现(二次投递)。而Kafka主要追求吞吐量,也就不需要这些独特的功能,所以选择sendfile()文件,以达到更高的吞吐量。

所以不同消息队列都有自己的特征,并不是说Kafka的架构就比RocketMQ比好,而是他们各自的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392598.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP——文本预处理

本文思维导图 文本预处理及其作用 文本语料在输送给模型前一般需要一系列的预处理工作, 才能符合模型输入的要求, 如: 将文本转化成模型需要的张量, 规范张量的尺寸等, 而且科学的文本预处理环节还将有效指导模型超参数的选择, 提升模型的评估指标. 一、文本处理的基本方法 1…

C++ | Leetcode C++题解之第326题3的幂

题目: 题解: class Solution { public:bool isPowerOfThree(int n) {return n > 0 && 1162261467 % n 0;} };

【TS】declare 全局声明方式

declare关键字 declare是描述TS文件之外信息的一种机制,它的作用是告诉TS某个类型或变量已经存在,我们可以使用它声明全局变量、函数、类、接口、类型别名、类的属性或方法以及后面会介绍的模块与命名空间。 declare关键字用来告诉编译器,某…

工业控制常用的EtherNet/IP、OPC UA协议的标签数据转发到另外的PLC寄存器地址

在工业自动化领域,越来越多的碰到标签方式通讯的设备,常用有CIP(基于EtherNet/IP) 的协议、OPCUA协议等,CIP协议主要是罗克韦尔/AB的PLC、欧姆龙NX/NJ系列的PLC等,OPCUA协议常见于工业机器人、智能焊接设备等。在不具备标签协议接…

C语言 ——深入理解指针(2)

目录 1. 数组名的理解2. 二级指针3. 指针数组4. 字符指针变量5. 数组指针变量6. 函数指针变量7. 函数指针数组 1. 数组名的理解 这里我们使用 &arr[0] 的方式拿到了数组第一个元素的地址,但是其实数组名本来就是地址,而且是数组首元素的地址&#x…

普华-PowerPMS APPGetUser SQL注入致RCE漏洞复现

0x01 产品简介 PowerPMS是上海普华科技自主研发的移动端工程项目管理产品。支持中英文切换,可与普华PowerOn、PowerPiP系列产品配套使用。产品与工程项目为核心,为项目各参建方提供包括任务管理、文档管理、质量检查、安全检查、施工日志、进度反馈、即时消息等功能在内的服…

Rust 所有权

所有权 Rust的核心特性就是所有权所有程序在运行时都必须管理他们使用计算机内存的方式 有些语言有垃圾收集机制,在程序运行时,他们会不断地寻找不再使用的内存在其他语言中,程序员必须显式的分配和释放内存 Rust采用了第三种方式&#xff1…

鲁班上门维修安装系统源码开发之功能模式

鲁班上门维修安装系统在当今的趋势呈现出显著的增长与创新。随着物联网、智能家居的普及,以及消费者对便捷、高效生活方式的追求,鲁班上门维修安装系统凭借其多渠道预约、智能派单、在线支付与费用明细透明等优势,赢得了市场的广泛认可。 …

【13.PIE-Engine案例——加载Landsat8 Collection2 SR数据集】

原始链接 原始路径欢迎大家登录航天宏图官网查看本案例原始来源 结果展示 具体代码 /*** File : Landsat8 Collection2 SR* Time : 2021/5/24* Author : piesat* Version : 1.0* Contact : 400-890-0662* License : (C)Copyright 航天宏图信息技术股份有…

【mathtype】word中如何输入4×4的矩阵,甚至阶数更多

在写论文或者使用word操作的时候,我们可能会使用矩阵插入我们所写的word中,今天小编就分享一下如何在word中输入矩阵。首先,我们word中需要安装mathtype的插件。 ①打开word,鼠标点击mathtype,再点击内联 ② 出现以下…

大模型常见的问题

什么是涌现现象 即模型在没有被明确训练执行某些任务的情况下,却能够展现出完成这些任务的能力。这是 因为模型在处理大量数据时学习到了复杂的模式和结构,从而能够泛化到未见过的任务上。 LLM的结构是什么样的 大语言模型通常基于Transformer架构&#…

读零信任网络:在不可信网络中构建安全系统10认证身份

1. 用户所知道的信息 1.1. 只有用户本人知道的信息 1.2. 密码 1.2.1. 密码是常用的认证机制 1.2.2. 密码验证就是确认用户“所知”性的较好途径 1.2.3. 用户可以利用密码管理器来便捷地管理多个高强度密码,从而有效降低数据泄露风险 1.2.4. 长度足够长 1.2.4.1…

数据结构——优先队列

文章目录 一、基本介绍二、基本操作三、实现1 实现的思路2 大顶堆实现2.1 概念2.2 完全二叉树的实现方式2.3 优先队列的图示2.4 对于基本操作实现的讲解2.4.1 检查队列是否为空 ( isEmpty )2.4.2 检查队列是否已满 ( isFull )2.4.3 查看 ( peek )2.4.4 插入 ( offer )2.4.5 删除…

本地GitLab runner自动编译Airoha项目

0 Preface/Foreword 1 GitLab runner环境 具体情况如下: Gitlab-ruuner运行在wsl 1中的Ubuntu 18.04 distro上专门为GitLab-runner分配了一个用户,名为gitlab-runner 2 自动编译 2.1 Permission denied 编译过程中,有两个文件出现权限不允…

基于风险的完整性和检查建模(RBIIM)MATLAB仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 Prior Density (先验密度) 4.2 Posterior Perfect Inspection (后验完美检验) 4.3 Posterior Imperfect Inspection (后验不完美检验) 4.4Cumulative Posterior Imperfect Inspection…

嵌入式安全:Provencore Secure os

嵌入式安全有何独特之处? 嵌入式安全领域的领导者 ProvenRun 宣布,其旗舰产品 ProvenCore for ARM™ Cortex-A 最近获得了 通用标准 (CC) EAL7 认证。这是全球首创,因为没有其他操作系统或可信执行环境 (TEE) 达到该安全级别。相比之下,移动安全市场上第二安全的 TEE(对于…

C语言菜鸟入门·数据结构·链表超详细解析

目录 1. 单链表 1.1 什么是单链表 1.1.1 不带头节点的单链表 1.1.2 带头结点的单链表 1.2 单链表的插入 1.2.1 按位序插入 (1)带头结点 (2)不带头结点 1.2.2 指定结点的后插操作 1.2.3 指定结点的前插操作 1.3 …

如何对人工智能系统进行测试|要点,方法及流程

当今社会,人工智能发展非常快。现在人工智能的发展已经渗透到了我们生活的方方面面,自动驾驶、或者我们手机里经常用到的一些应用都或多或少涉及到了一些人工智能的功能,比如说美图秀秀、新闻推荐、机器翻译以及个性化的购物推荐等等都涉及到…

视频监控汇聚平台LntonCVS视频监控管理平台解决方案和常见的接入方式

一、视频融合平台 LntonCVS是一款支持多种协议和设备接入的视频汇聚流媒体平台。它能够统一管理和整合不同品牌、不同协议的视频资源,构建视频数据资源池,并通过视频资源目录为各类业务场景提供丰富、实时、高清的视频资源。 二、接入方式 1. 前端设备…

视频汇聚平台EasyCVR接入移动执法记录仪,视频无法播放且报错500是什么原因?

GB28181国标视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力,为各行各业的视频监控需求提供了优秀的解决方案。视频智能分析平台EasyCVR支持多协议接入,兼容多类型的设备,包括IPC、NV…