【消息队列笔记】chp2-如何选择消息队列

news2024/11/25 20:25:18

一、选择消息队列的基本标准

不同的消息队列产品在功能特性方面是各有优劣的,但是我们在选择的时候应尽量保证一个通用的最低标准。

1.必须是开源的产品

开源很重要,如果在使用该产品时遇到了影响业务的bug,可以通过修改源代码来进行修复。否则就只能等待开发者发布下一个版本了。

2.必须是近年来比较流行且有一定社区活跃度的产品

流行的好处是我们遇到的bug会比较少,其次,流行的产品与周边生态系统会有比较好的集成和兼容。例如flink内置了kafka的data source,使用kafka很容易作为flink的数据源开发流计算应用。

3.必须包括几个重要的特性

  • 消息的可靠传递,确保不丢消息。
  • 支持集群。
  • 具备足够好的性能。

二、不同的消息队列对比

对于消息队列来说,主要有两种模型:点对点队列模型发布/订阅模型二者的最大区别在于一份消息数据能否被消费多次的问题。

点对点队列模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iI9gCNxR-1667985459686)(./img/chp2-1.png)]

发布/订阅模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bHbRkkhV-1667985459687)(./img/chp2-2.png)]

实际上在发布/订阅模型中,如果只有一个订阅者,那么它和队列模型基本是一样的。也就是说,发布/订阅模型在功能层面上是可以兼容队列模型的

1.RabbitMQ

优点

  • 轻量级、迅捷,容易部署和使用,开箱即用;
  • 是少数支持AMQP协议的消息队列之一;
  • ProducerQueue之间增加了一个Exchange模块(可以理解为交换机),可以自由实现路由规则,使得路由配置更加灵活;
  • 支持的编程语言是消息队列中最多的,如果开发的系统使用的是冷门编程语言,可以找到对应的RabbitMQ客户端。

缺点

  • 对消息堆积的支持不好。在它的设计理念中,消息队列是一个管道,不应当大量堆积消息。所以当消息大量积压时,会导致性能急剧下降。
  • 相比其他消息队列性能较差。每秒可以处理几万到十几万消息,不过如果要求更高则应该选择其他消息队列。
  • 使用Erlang语言开发,不易进行维护。Erlang语言不易学,很难对RabbitMQ进行扩展和二次开发。

RabbitMQ使用的是队列模型,它通过配置Exchange模块来将消息投放到多个队列,来实现发布/订阅模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DpUJcyho-1667985459689)(./img/chp2-3.png)]


2.RocketMQ

优点

  • 阿里内部双11使用,性能、可靠性、稳定性都值得信赖,每秒处理几十万条消息。
  • 中文社区比较活跃。
  • 使用java开发,易于对其进行扩展和二次开发。
  • 收到消息后直接发送,响应时延很低,可以做到毫秒级别。

缺点

  • 作为国产消息队列,在国际上没有那么流行,与周边生态系统的集成和兼容稍差。

RocketMQ使用的是发布/订阅模型,通过消费者组来实现对消息的重复消费。同一个消费者组中的消费者只能消费不同的队列,不同消费者组中的消费者可以消费同一队列。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRAuzkDU-1667985459689)(./img/chp2-4.png)]


3.Kafka

优点

  • 与周边生态系统兼容性最好,尤其在大数据和流计算领域,所有相关开源软件系统都会优先支持kafka。
  • 在数据可靠性、稳定性和功能特性等方面可以满足绝大多数场景需求。
  • 异步收发的性能是三者中最好的,但是与RocketMQ没有量级上的差异。
  • 使用java和scala进行开发。

缺点

  • 不太适合在线业务场景。由于kafka是批量发送数据的,所以在消息数量不是很多时,时延反而比较高。

kafka同样使用发布/订阅模型,它同样通过消费者组实现重复消费,不过RocketMQ中的队列(Queue)在kafka中称为分区(Partition)。


4.Pulsar

新兴的开源消息队列,采用存储和计算分离的设计,成熟度还没有很高。


5.ActiveMQ

老一代消息队列,逐渐淘汰。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频开发基础概念

目录一、音视频如何采集和表示1、音视频录制原理2、音视频播放原理二、视频基础概念1、图像基础概念2、RGB、 YUV深入讲解3、RGB和YUV的转换4、YUV Stride对齐问题三、视频为什么要做编码四、音频基础概念1、基本概念2、声音的物理性质-频率-音频采样率3、数字声音的表示4、音频…

【数据结构】——顺序表

目录 1.线性表 2.顺序表 2.1概念及结构 3.静态顺序表 4.动态顺序表 1.定义一个顺序表 2.顺序表的初始化和销毁 3.顺序表尾插 4.顺序表打印 5.顺序表尾删 6.顺序表头插 7.顺序表头删 8.在pos(任意)位置的插入 9.在pos(任意&#…

[附源码]计算机毕业设计JAVAjsp美容院业务管理系统

[附源码]计算机毕业设计JAVAjsp美容院业务管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM m…

用DIV+CSS技术设计的体育篮球主题 校园体育网页与实现制作(web前端网页制作课作业)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

SpringBoot(二):基础配置文件、yaml语法、多环境开发配置

目录 一、配置文件 1、配置文件格式 2、自动提示功能失灵解决方案 3、SpringBoot配置文件加载顺序 二、yaml 1、yaml介绍 2、yaml语法规则 3、yaml数组数据 4、yaml数据读取 三、多环境开发配置 1、多环境启动配置 2、多环境启动命令格式 3、多环境开发控制 四、…

VS Code常用操作

文章目录常用快捷键修改VS Code底部状态栏颜色VS Code添加Anaconda的Python源常用快捷键 (1) 对于 行 的操作: 重开一行:光标在行尾的话,回车即可;      不在行尾,Ctrl Enter 向下重开一行;    …

手拉手一起学HTML(下)——表格标签和列表标签,表单标签

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 目录 一.表格标签 1.1表格的主要作用 1.2表格的基本语法 1.3表头单元格标签 1.4表格属性 1.5表格结构标签 1.6合并单元格&#xff08…

prometheus 监控

【00】结构原理微服务中的监控分根据作用领域分为三大类,Logging,Tracing,Metrics。* Logging - 用于记录离散的事件。例如,应用程序的调试信息或错误信息。它是我们诊断问题的依据。比如我们说的ELK就是基于Logging。* Metrics -…

HTTP协议详解

1.HTTP协议介绍 先来给大家介绍以下HTTP: HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP 是一种…

【网络篇】如何搭建自己的DNS服务器

引言 平时练习域名解析,一般直接修改的/etc/hosts文件。对于服务器数量小的情况完全可以,但是如果服务器数量较多,每个都修改比较麻烦。 DNS是作为域名解析。在实际的生产过程中,尤其是对于内网搭建的情况,DNS不可能…

宝塔面板如何设置301重定向,为什么网站要设置重定向?

大家好,我是Q站小编鹏仔,本次给大家带来的教程是宝塔面板如何设置301重定向。 在设置之前,我们需先明白为什么要设置重定向呢? 在购买域名时,域名本身是不带有www的,由于在以前网站方都会增加一个"ww…

C#项目实战|人脸识别考勤

此文主要通过WinForm来制作的一个人脸识别考勤打卡程序,有兴趣的小伙伴可以接入到打卡机上。 一、实现流程1.1、创建项目1.2、设计页面1.3、创建应用1.4、获取Token及参数解析1.5、与人脸数据比对并展示一、实现流程 1.1、创建项目 打开Visual Studio,右…

HTML+CSS静态网页设计:(房地产网站设计与实现6页)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

javascript事件处理二 事件对象event详解及target和currentTarget区别

在处理事件的时候,所有和事件相关的东西都封装到event这个对象里面。所以这个对象非常的重要。这个对象有非常多的内容,我们讨论几个计较常见和以及比较难区别的target和currentTarget。 常见属性 页面就是一个div,然后我们监听他的oclick事…

Python+大数据-Spark技术栈(三) SparkCore加强

Python大数据-Spark技术栈(三) SparkCore加强 重点:RDD的持久化和Checkpoint提高拓展知识:Spark内核调度全流程,Spark的Shuffle练习:热力图统计及电商基础指标统计combineByKey作为面试部分重点,可以作为扩展知识点 …

NLP | XLNet :用于语言理解的广义自回归预训练 论文详解

论文:XLNet: Generalized Autoregressive Pretraining for Language Understanding 论文地址:https://proceedings.neurips.cc/paper/2019/file/dc6a7e655d7e5840e66733e9ee67cc69-Paper.pdf 1.介绍 XLNet 是从蓬勃发展的自然语言处理 (NLP) 领域中出…

食用前须知(阅读并同意后在食用其他部分)

昨天刚和计科某数据结构老师聊这个事 让我别写题解了 以后会偷摸的在csdn更,大家千万低调点,严谨点!!! 一般不会当天更了,会拖个一两天,大家先把会的写写,不会的再来看我教程 就算真…

高效率Paper写作需要哪些建议?

高效写Paper最关键的是要多写,写多了,英语行文能力提高,并且知道Paper写作大概的套路,Paper写作效率自然上升。小编为同学们带来一些建议。 The key to writing paper efficiently is to write more.If you write more,improve yo…

ijkplayer项目

ijkplayer项目 环境配置 NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。NDK提供了一系列的工具,帮助开发者快速开发C(或C)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨…

C++ Reference: Standard C++ Library reference: C Library: cwchar: wmemset

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwchar/wmemset/ 函数 <cwchar> wmemset wchar_t* wmemset (wchar_t* ptr, wchar_t wc, size_t num); 填充宽字符数组 将由ptr指向的宽字符数组的第一个num个元素设置为wc指定的值。 这是memset&#xff08;&…