【RocketMQ系列一】初识RocketMQ

news2024/11/25 20:38:37

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

文章目录

    • 1、消息队列
    • 2、消息队列的应用场景
    • 3、RocketMQ的简介
    • 4、各类MQ的对比
    • 5、RocketMQ的技术架构
    • 6、RockerMQ领域模型
      • 1. 消息生产
      • 2. 消息存储
      • 3. 消息消费
    • 参考

1、消息队列

消息队列(Message Queue,下面简称MQ) 是一种用于分布式系统中各节点之间进行消息传输的,独立于平台的软件系统。如果把分布式系统中的各个节点比喻成商家和顾客的话,那么消息中间件就是快递公司。商家(生产者)将快递(消息)投递给快递公司,快递公司负责运送快递给顾客(消费者)。那么在分布式系统架构中为啥要用消息中间件呢?

2、消息队列的应用场景

消息队列在分布式系统中主要用于异步解耦,流量削峰等场景。就以订单流程为例。没有使用消息队列的情况下,用户下单,需要订单系统调用商品系统扣减库存,调用积分系统发放积分,调用优惠券系统抵扣优惠券。这几个系统都与订单系统耦合在一块了。任意一个系统的失败都可能导致下单失败。

image-20230924154439129

使用消息队列之后,订单系统只需要发送一条消息,商品系统,积分系统,优惠券系统直接订阅订单系统发送的消息即可。

image-20230924155636848

3、RocketMQ的简介

RocketMQ是阿里巴巴开源的一款消息队列,它具有低延迟,高吞吐量,高可靠性等特点。目前,RocketMQ在阿里巴巴内部有着广泛的应用,经历多次双十一的洗礼,RocketMQ的可靠性非常高。

4、各类MQ的对比

目前市面上常用的MQ有: kafka, RabbitMQ,RocketMQ,ActiveMQ。这四种MQ的主要对比如下图所示:

名称RabbitMQActiveMQRocketMQkafka
开发语言ErlangJavaJavaScala&Java
客户端支持语言支持,JAVA优先语言无关只支持JAVA支持,JAVA优先
单机吞吐量其次(万级)最差(万级)最高(十万级)次之(十万级)
消息延迟微秒级\比kafka快毫秒级
数据可靠性可以保证数据不丢失,有slave用作备份master/slave支持异步实时刷盘,同步刷盘,同步复制,异步复制数据可靠,并且有副本机制,有容错容灾能力
HAmaster/slave模式,master提供服务,slave仅作备份基于Zookeeper+LevelDB的Master-Slave实现方式支持多Master模式,多Master多Slave模式,异步复制模式,支持replica机制,leader宕机后,备份自动顶替,并重新选举leader(基于zookeeper)
消息推拉模式多协议,Pull/Push均有支持多协议,Pull/Push均有支持多协议,Pull/Push均有支持Pull
成熟度成熟成熟比较成熟成熟
特点
支持协议多协议支持:AMQP,XMPP,SMTP,STOMP自有协议自有协议,社区封装了HTTP协议支持
持久化内存,文件,支持数据堆积,但数据堆积会影响生产速率内存,文件,数据库磁盘文件磁盘文件,只要做到
事务不支持支持支持不支持,但可以通过Low Level API保证只消费一次
负载均衡支持支持支持支持
集群支持支持支持支持
评价优点:由于Erlang语言的特性,mq性能较好,管理界面丰富,在互联网公司也有大规模应用;支持amqp。 缺点:erlang语言难度较大,集群不支持动态扩展。优点:成熟的产品,已经在很多公司得到应用。缺点:社区不活跃,会出现莫名其妙的问题,且会丢失消息优点:模型简单。在阿里大规模应用,单日处理消息上百亿。

综上所述:

早期的话ActiveMQ使用比较多,但是ActiveMQ没有经历过大吞吐量场景的验证,且可能会丢失消息,社区也不活跃,现在应用的比较少了。

RabbitMQ 得益于其活跃的开源社区以及高可用性被不少公司应用。但是Erlang语言阻止了大量的java开发工程师去深入研究和掌握它,对公司而言,几乎处于不可控的状态。

RocketMQ 作为经历过双十一大吞吐量场景的考验,Java语言开发的消息队列,现在被越来越多的公司采用。RocketMQ也已经捐给了Apache 基金会,社区较为活跃。

kafka主要应用于日志收集场景。

如果系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,需要低延迟和高稳定性,建议使用 RocketMQ。

如果需要处理海量的消息,像收集日志、监控信息或是埋点这类数据,或是你的应用场景大量使用了大数据、流计算相关的开源产品,那 Kafka 是最适合的消息队列。

5、RocketMQ的技术架构

image-20230924162430614

RockerMQ架构上主要分为四部分, 如上图所示:

  1. Producer: 消息生产者角色,支持分布式集群部署,主要用于发送消息,通常集成于业务系统。它相当于是发信者。

  2. Consumer: 消息消费者角色,支持分布式集群部署,支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的消费,通常集成于业务系统。它相当于收信者。

  3. Broker: 主要负责消息的存储、投递和查询以及服务高可用保证。它相当于是邮局 其内部包含以下几个重要子模块。

    4.1. Remoting Module: 整个Broker的实体,负责处理来自Clients端的请求。

    4.2. Client Manager: 负责管理客户端(Producer/Consumer)和维护Topic订阅信息。

    4.3. Store Service: 提供方便简单的API接口处理消息存储到物理磁盘和查询功能。

  4. NameServer: 它是Broker的注册中心,支持Broker的动态注册与发现。它主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的提供者。然后提供心跳检测机制,检查Broker是否存活;路由信息管理,每个NameServer通常也是集群方式部署,各实例互不进行通信,Broker向每一台NameServer注册自己的路由信息, 所以,每一个NameServer实例上面都保存一份完整的路由信息,当某个NameServer因某种原因下线了,Broker仍然可以向其他NameServer同步其路由信息。NameServer是无状态的。

6、RockerMQ领域模型

image-20230924170814616

如上图所示,RocketMQ中消息的生命周期主要分为消息生产、消息存储、消息消费这三部分。

生产者生产消息并发送到RocketMQ服务端,消息被存储到服务端的主题中,消费者通过订阅主题消费消息。

1. 消息生产

生产者(Producer):用于产生消息的运行实体,一般集成于业务调用链路的上游。生产者是轻量级匿名无身份的。

2. 消息存储

  1. 主题(Topic):

    RocketMQ 消息传输和存储的分组容器,主题内部由多个队列组成,消息的存储和水平扩展实际是通过主题内的队列实现的。

  2. 队列(MessageQueue):

    RocketMQ 消息传输和存储的实际单元容器,类比于其他消息队列中的分区。RocketMQ 通过流式特性的无限队列结构来存储消息,消息在队列内具有顺序存储特性。

  3. 消息(Message):

    RocketMQ 的最小传输单元,消息具备不可变性,在初始化发送和完成存储后即不可变。

3. 消息消费

  1. 消费者分组(ConsumerGroup):

    RocketMQ发布订阅模型中定义的独立的消费身份分组。用于统一管理底层运行的多个消费者(Consumer)。同一个消费者组的多个消费者必须保持消费逻辑和配置一致,共同分担该消费者组订阅的消息,实现消费能力的水平扩展。

  2. 消费者(Consumer):

    RocketMQ 消费消息的运行实体,一般集成在业务调用链路的下游。消费者必须指定到某一个消费者组中。

  3. 订阅关系(Subscription):

    RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。RocketMQ 的订阅关系除过滤表达式之外都是持久化的,即服务端重启或请求断开,订阅关系依然保留。

参考

领域模型概述

千锋教育RocketMQ全套视频教程,快速掌握MQ消息中间件

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

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

相关文章

thinkphp6入门(9)-- 获取url路径中的应用名、控制器名、操作名

如果使用了多应用模式,可以通过下面的方法来获取当前应用 app(http)->getName(); 获取当前控制器 Request::controller(); 获取当前操作 Request::action(); 在中间件middleware中是无法获取控制器和操作的 需要将middleware的引入修改为 config 目录下的 ro…

计算机网络 实验六 Wireshark 抓包实验

实验目的: 通过实验掌握下列知识: 1. 掌握Wireshark抓包工具的使用。 2. 掌握建立telnet用户密码登录方式,并通过wireshark抓取相关信息。 3. 理解TCP的包结构,并掌握TCP建立连接的过程。 4. 掌握使用tftp工具,上…

一文带你了解以色列的当红38家网络安全公司

2014年,以色列出口的网络安全产品总值达60亿美金,占领了全球10%的网络安全市场。2014-2016年,微软用3.2亿美元买下数据隐私公司Adallom;Facebook花了1.5亿美元收购移动端数据分析公司Onavo;PayPal以6千万美元收下CyAct…

2023面试知识点二

1、vue双向绑定是如何实现的 原理主要通过数据劫持和发布订阅模式实现的通过Object.defineProperty()来劫持各个属性的setter,getter,监听数据的变化在数据变动时发布消息给订阅者(watcher),订阅者触发响应的回调(update)更新视图。 2、ing…

非一线工程管理者的一对一沟通

一线工程管理者主要管理/领导工程师完成实际的工程任务,而非一线的工程管理者需要领导一线管理者,更多的关注团队本身,因此两者在做一对一沟通的时候需要有不同的关注点。原文: One-on-Ones for (Engineering) Manager of Managers 如果没有耐…

Linux该如何学习,给你支招

如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法。这只是自己关于学习Linux的建议。 一、如何去学习 学习大多类似庖丁解牛,对事物的认识一般都是由浅入深、由表及里的过程,循序才能渐进。学习 Linux 同样要有一…

复旦MBA魏文童:构建完备管理知识体系,助力企业数字化发展

日月光华,旦复旦兮!复旦MBA如同一个巨大的磁场,吸引了诸多来自五湖四海、各行各业的职场精英。从初入职场的青涩懵懂到如今的独当一面专业干练,他们逐渐成长为职场的中坚力量,在各自领域内发光发热。作为新时代的青年&…

怒刷LeetCode的第27天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:位运算 第二题 题目来源 题目内容 解决方法 方法一:贪心算法 第三题 题目来源 题目内容 解决方法 方法一:二分查找 方法二:牛顿迭代法 方法三:位操作…

基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解

1、基于pytest单元测试框架的规则 1.1 模块名(即文件名)必须以test_开头或者_test结尾 1.2 类名必须以Test开头且不能有init方法 1.3 用例名(测试方法)必须以test开头 同时,我也为大家准备了一份软件测试视频教程&…

【算法-动态规划】零钱兑换 II-力扣 518

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Smartforms 打印出现的问题

上半年ECC做了升级 程序代码从ECC迁移到S4 有用户反馈 打印不能用了 经过调试发现在打印程序中 竟然返回2,但是 smartforms ZRPT_CO_YFLL_DY又是存在的 。 然后去激活 并与 ECC对比发现问题 S4的页大小竟然这么小 找到对应的页格式 对比ECC和S4 果然是这个…

2023年中国商用服务机器人行业发展概况分析:国产机器人厂商向海外进军[图]

商用服务机器人指在非制造业的商用服务场景中,用来替代或辅助人类进行服务性质工作的机器人;常见的商用场景中,商用服务机器人主要分为终端配送类机器人,商用清洁类机器人,引导讲解类机器人等,被广泛应用在…

7+线粒体相关基因预后模型+肿瘤微环境+免疫细胞浸润+实验验证

今天给同学们分享一篇线粒体预后模型实验的生信文章“Constructing a novel mitochondrial-related gene signature for evaluating the tumor immune microenvironment and predicting survival in stomach adenocarcinoma”,这篇文章于2023年3月13日发表在J Trans…

Spring Boot 生成二维码

效果图 1.maven依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId>

力扣 095. 最长公共子序列(C语言+动态规划)

1. 题目 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08…

强化学习

文章目录 强化学习概念Model-FreeValue-based learningDQN State-based learning蒙特卡洛近似 Actor-Critic LearningModel-BasedMonte Carlo TreeSearch(MCTS)-AlphaGo 强化学习概念 Terminologies&#xff08;术语&#xff09; State s&#xff1a;环境的一个状态Agent &…

程 控 电 源1761程控模块电源

程 控 电 源 1761程控模块电源 1761程控模块电源是在自动测试环境中提供偏置功率和对部件或最终产品提供激励的理想设备&#xff0c;是测试系统必备的测试仪器。适用于研发、设计、生产制造等自动测试领域。 1761程控模块电源为用户选配电源提供了灵活性&#xff0c;根据需要…

27岁,准备转行做网络安全渗透,完全零基础,有前途吗?

你该不该转行的问题一样&#xff0c;都是你自己的人生选择&#xff0c;怎能听人一面之词&#xff1f; 所以转行一定要想清楚&#xff0c;对自身的实力做好清晰的估算&#xff0c;换个赛道重新开始、从头再来的话&#xff0c;那么我建议你考虑“网络安全”&#xff0c;前景好薪…

CSS 轮廓(outline)

轮廓&#xff08;outline&#xff09;是绘制于元素周围的一条线&#xff0c;位于边框边缘的外围&#xff0c;可起到突出元素的作用。 轮廓&#xff08;outline&#xff09;属性指定元素轮廓的样式、颜色和宽度。 CSS 轮廓&#xff08;outline&#xff09; 轮廓&#xff08;ou…

关于网络协议的若干问题(五)

1、DH 算法会因为传输随机数被破解吗&#xff1f; 答&#xff1a;DH 算法的交换材料要分公钥部分和私钥部分&#xff0c;公钥部分和其他非对称加密一样&#xff0c;都是可以传输的&#xff0c;所以对于安全性是没有影响的&#xff0c;而且传输材料远比传输原始的公钥更加安全。…