RocketMQ是什么

RocketMQ是阿里巴巴开源的一款高性能、高吞吐量的分布式消息中间件,已经捐赠给Apache基金会。

RocketMQ 是阿里巴巴在 2012 年开源的分布式消息中间件,目前已经捐赠给 Apache 基金会,并于 2016 年 11 月成为 Apache 孵化项目。

RocketMQ

中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。中间件技术所提供的互操作性,推动了分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括 web 服务器、事务监控器和消息队列软件。

中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。

中间件是位于平台(硬件和操作系统)和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,中间件可以有符合接口和协议规范的多种实现。

RocketMQ 就是一款分布式消息中间件。那么,RocketMQ 主要为了解决哪些问题呢?

(1)Publish/Subscribe

发布与订阅是消息中间件的最基本功能,也是相对于传统 RPC 通信而言。

(2)Message Priority

规范中描述的优先级是指在一个消息队列中,每条消息都有不同的优先级,一般用整数来描述,优先级高的消息先投递,如果消息完全在一个内存队列中,那么在投递前可以按照优先级排序,令优先级高的先投递。

由于 RocketMQ 所有消息都是持久化的,所以如果按照优先级来排序,开销会非常大,因此 RocketMQ 没有特意支持消息优先级,但是可以通过变通的方式实现类似功能,即单独配置一个优先级高的队列,和一个普通优先级的队列, 将不同优先级发送到不同队列即可。

(3)Message Order

消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了 3 条消息,分别是订单创建,订单付款,订单完成。消费时,要按照这个顺序消费才能有意义。但是同时订单之间是可以并行消费的。

RocketMQ 可以严格的保证消息有序。

(4)Message Filter

①Broker 端消息过滤

在 Broker 中,按照 Consumer 的要求做过滤,优点是减少了对于 Consumer 无用消息的网络传输。缺点是增加了 Broker 的负担,实现相对复杂。

②Consumer 端消息过滤

这种过滤方式可由应用完全自定义实现,但是缺点是很多无用的消息要传输到 Consumer 端。

(5)Message Persistence

消息中间件通常采用的几种持久化方式:

①持久化到数据库,例如 Mysql。

②持久化到 KV 存储,例如 levelDB、伯克利 DB 等 KV 存储系统。

③文件记录形式持久化,例如 Kafka,RocketMQ

④对内存数据做一个持久化镜像,例如 beanstalkd,VisiNotify

⑤前三种持久化方式都具有将内存队列 Buffer 进行扩展的能力,第四种方式只是一个内存的镜像,作用是当 Broker 挂掉重启后仍然能将之前内存的数据恢复出来。

RocketMQ 充分利用 Linux 文件系统内存 cache 来提高性能。

(6)Message Reliablity

影响消息可靠性的几种情况:

①Broker 正常关闭;

②Broker 异常 Crash;

③OS Crash;

④机器掉电,但是能立即恢复供电情况。

⑤机器无法开机(可能是 cpu、主板、内存等关键设备损坏)

⑥磁盘设备损坏。

前四种情况都属于硬件资源可立即恢复情况,RocketMQ 在这四种情况下能保证消息不丢,或者丢失少量数据(依赖刷盘方式是同步还是异步)。

后两种情况属于单点故障,且无法恢复,一旦发生,在此单点上的消息全部丢失。RocketMQ 在这两种情况下,通过异步复制,可保证 99%的消息不丢,但是仍然会有极少量的消息可能丢失。通过同步双写技术可以完全避免单点,同步双写势必会影响性能,适合对消息可靠性要求极高的场合,例如与 Money 相关的应用。

RocketMQ 从 3.0 版本开始支持同步双写。

(7)Low Latency Messaging

在消息不堆积情况下,消息到达 Broker 后,能立刻到达 Consumer。RocketMQ 使用长轮询 Pull 方式,可保证消息非常实时,消息实时性不低于 Push。

(8)At least Once

是指每个消息必须投递一次。RocketMQ Consumer 先 pull 消息到本地,消费完成后,才向服务器返回 ack,如果没有消费一定不会 ack 消息,所以 RocketMQ 可以很好的支持此特性。

(9)Exactly Only Once

①发送消息阶段,不允许发送重复的消息。

②消费消息阶段,不允许消费重复的消息。

只有以上两个条件都满足情况下,才能认为消息是“Exactly Only Once”,而要实现以上两点,在分布式系统环境下,不可避免要产生巨大的开销。所以 RocketMQ 为了追求高性能,并不保证此特性,要求在业务上进行去重,也就是说消费消息要做到幂等性。RocketMQ 虽然不能严格保证不重复,但是正常情况下很少会出现重复发送、消费情况,只有网络异常,Consumer 启停等异常情况下会出现消息重复。

(10)Broker 的 Buffer 问题

Broker 的 Buffer 通常指的是 Broker 中一个队列的内存 Buffer 大小,这类 Buffer 通常大小有限。

另外,RocketMQ 没有内存 Buffer 概念,RocketMQ 的队列都是持久化磁盘,数据定期清除。RocketMQ 同其他 MQ 有非常显著的区别,RocketMQ 的内存 Buffer 抽象成一个无限长度的队列,不管有多少数据进来都能装得下,这个无限是有前提的,Broker 会定期删除过期的数据,例如 Broker 只保存 3 天的消息,那么这个 Buffer 虽然长度无限,但是 3 天前的数据会被从队尾删除。

(11)回溯消费

回溯消费是指 Consumer 已经消费成功的消息,由于业务上的需求需要重新消费,要支持此功能,Broker 在向 Consumer 投递成功消息后,消息仍然需要保留。并且重新消费一般是按照时间维度,例如由于 Consumer 系统故障,恢复后需要重新消费 1 小时前的数据,那么 Broker 要提供一种机制,可以按照时间维度来回退消费进度。

RocketMQ 支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯。

(12)消息堆积

消息中间件的主要功能是异步解耦,还有个重要功能是挡住前端的数据洪峰,保证后端系统的稳定性,这就要求消息中间件具有一定的消息堆积能力,消息堆积分以下两种情况:

①消息堆积在内存 Buffer,一旦超过内存 Buffer,可以根据一定的丢弃策略来丢弃消息,如 CORBA Notification 规范中描述。适合能容忍丢弃消息的业务,这种情况消息的堆积能力主要在于内存 Buffer 大小,而且消息堆积后,性能下降不会太大,因为内存中数据多少对于对外提供的访问能力影响有限。

②消息堆积到持久化存储系统中,例如 DB,KV 存储,文件记录形式。 当消息不能在内存 Cache 命中时,要不可避免的访问磁盘,会产生大量读 IO,读 IO 的吞吐量直接决定了消息堆积后的访问能力。

评估消息堆积能力主要有以下四点:

消息能堆积多少条,多少字节?即消息的堆积容量。

消息堆积后,发消息的吞吐量大小,是否会受堆积影响?

消息堆积后,正常消费的 Consumer 是否会受影响?

消息堆积后,访问堆积在磁盘的消息时,吞吐量有多大?

(13)分布式事务

已知的几个分布式事务规范,如 XA,JTA 等。其中 XA 规范被各大数据库厂商广泛支持,如 Oracle,Mysql 等。其中 XA 的 TM 实现佼佼者如 Oracle Tuxedo,在金融、电信等领域被广泛应用。

分布式事务涉及到两阶段提交问题,在数据存储方面的方面必然需要 KV 存储的支持,因为第二阶段的提交回滚需要修改消息状态,一定涉及到根据 Key 去查找 Message 的动作。RocketMQ 在第二阶段绕过了根据 Key 去查找 Message 的问题,采用第一阶段发送 Prepared 消息时,拿到了消息的 Offset,第二阶段通过 Offset 去访问消息,并修改状态,Offset 就是数据的地址。

RocketMQ 这种实现事务的方式,没有通过 KV 存储做,而是通过 Offset 方式,存在一个显著缺陷,即通过 Offset 更改数据,会令系统的脏页过多,需要特别关注。

(14)定时消息

定时消息是指消息发到 Broker 后,不能立刻被 Consumer 消费,要到特定的时间点或者等待特定的时间后才能被消费。

如果要支持任意的时间精度,在 Broker 层面,必须要做消息排序,如果再涉及到持久化,那么消息排序要不可避免的产生巨大性能开销。

RocketMQ 支持定时消息,但是不支持任意时间精度,支持特定的 level,例如定时 5s,10s,1m 等。

(15)消息重试

Consumer 消费消息失败后,要提供一种重试机制,令消息再消费一次。Consumer 消费消息失败通常可以认为有以下几种情况:

由于消息本身的原因,例如反序列化失败,消息数据本身无法处理(例如话费充值,当前消息的手机号被注销,无法充值)等。这种错误通常需要跳过这条消息,再消费其他消息,而这条失败的消息即使立刻重试消费,99%也不成功,所以最好提供一种定时重试机制,即过 10s 秒后再重试。

由于依赖的下游应用服务不可用,例如 db 连接不可用,外系统网络不可达等。遇到这种错误,即使跳过当前失败的消息,消费其他消息同样也会报错。这种情况建议应用 sleep 30s,再消费下一条消息,这样可以减轻 Broker 重试消息的压力。

简单说来,RocketMQ 具有以下特点:

①是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。

②Producer、Consumer、队列都可以分布式。

③Producer 向一些队列轮流发送消息,队列集合称为 Topic,Consumer 如果做广播消费,则一个 consumer 实例消费这个 Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个 topic 对应的队列集合。

④能够保证严格的消息顺序。

⑤提供丰富的消息拉取模式。

⑥高效的订阅者水平扩展能力。

⑦实时的消息订阅机制。

⑧亿级消息堆积能力。

⑨较少的依赖。

(0)
时间不会说谎  的头像时间不会说谎  

相关推荐

  • 洗碗机用一次大概多少钱,节约时间和水费的好帮手

    洗碗机是现代家庭中不可或缺的电器之一。它可以帮助我们节省时间和水费,同时还能让我们的餐具更加干净卫生。但是,很多人都不知道洗碗机用一次大概需要多少钱。在本文中,我们将为您解答这个问题,并提供一些省钱的小技巧。一、洗碗机用一次需要多少水洗

    2023年10月17日
  • 小米充电发烫严重怎么办,如何有效降温保护手机电池

    随着智能手机的普及,手机电池的寿命也成为了一个备受关注的话题。而小米作为国内知名智能手机品牌,其手机电池的使用情况也备受关注。有很多小米手机用户反映,充电时手机会发烫严重,这不仅影响了用户的使用体验,还可能对手机电池产生不良影响。那么,小米

    2023年12月5日
  • Sellers.json是什么

    Sellers.json 是一项 IAB Tech Lab 标准,可提高广告生态系统的透明度并帮助打击欺诈行为。Sellers.json 通过公开提供的卖方信息文件来运作。发布商可…

  • 酷派手机怎么删除多余的桌面,简单易行的操作指南

    如果你是一位酷派手机用户,你可能会发现自己的手机桌面上有许多多余的应用程序,这些应用程序不仅占用了宝贵的空间,还会让你的手机变得混乱不堪。那么,如何删除这些多余的桌面呢?在本篇文章中,我们将为您提供简单易行的操作指南。步骤一:进入桌面编辑

    2023年11月30日
  • 2020年最适合YouTube的视频相机,索尼Sony A6600

    A6600 仍然是一款平衡的相机,价格合理,并且将许多功能组合到一个小巧的机身中。对于大多数 YouTube 视频创作者来说,这是最好的视频相机。 YouTube 现在吸引了如此庞…

  • 红米Redmi Turbo 3怎么没有1和2?为什么这么命名?

    红米RedmiTurbo3目前已经正式官宣了,这是红米Redmi全新的系列,主打高性价比。很多小伙伴可能会疑问,作为全新系列的首款机型,为什么会被命名为Turbo3,1和2都到哪里去了呢?如果你想要了解的话,可以看看下面的文章内容。红

    2024年4月1日
  • 日立等离子电视机开机后绿灯闪烁,如何解决这个问题

    如果您购买了日立等离子电视机,在使用过程中遇到了开机后绿灯闪烁的问题,那么本文将会为您提供解决方案。这个问题的原因可能是多方面的,但是我们可以通过以下步骤来解决这个问题。步骤1:检查电视机电源是否连接正常首先,我们需要检查电视机的电源是

    2023年10月25日
  • 三星s24+怎么设置全面屏手势?

    在当今移动设备市场上,越来越多的手机品牌纷纷推出了全面屏手机,作为一款拥有出色屏幕表现的手机,三星s24+也提供了全面屏手势设置,让用户能够更加便捷地操作手机。接下来,我们将为你详细介绍如何设置三星s24+的全面屏手势,使你能够充分发挥这款

    2024年1月24日
  • 诺基亚5230没有wifi,怎样解决这个问题

    诺基亚5230是一款经典的智能手机,但是它有一个致命的问题,就是没有wifi功能。这对于我们现在使用手机上网的需求来说,是非常不方便的。那么,如果你也在使用诺基亚5230的时候遇到了这个问题,该怎么解决呢?下面,我就为大家提供一些解决方法。

    2023年10月7日
  • Discord是什么

    Discord是一款专为电子游戏社区设计的免费网络实时通话软件与数字发行平台,主要用户为游戏玩家与其机器人,玩家与其机器人之间可以在软件的聊天频道通过信息、图片、视频和音频进行互动…

  • 格力空调有一体机吗,详解一体机的优势和劣势

    在如今的生活中,空调已经成为了人们生活中不可缺少的一部分,而格力空调作为中国知名的空调品牌,备受消费者的喜爱。但是,有很多人对于格力空调是否有一体机这个问题还存在一些疑问。那么,格力空调有一体机吗?一体机的优势和劣势又是什么呢?在本文中,我

    2023年10月26日
  • geforce8600gt显卡,怎样选择最适合自己的型号

    本文目录一览为什么要选择Geforce8600GT显卡?如何选择最适合自己的Geforce8600GT显卡?如何安装Geforce8600GT显卡?如何优化Geforce8600GT显卡性能?总结Geforce8600GT

    2023年10月30日
  • 博冠银虎单筒观鸟镜,如何选择最适合自己的观鸟镜

    作为一个鸟类爱好者,观鸟是我们最热爱的活动之一。而在观鸟的过程中,选择一款适合自己的观鸟镜是非常重要的。在市面上,有许多不同品牌和型号的观鸟镜,而博冠银虎单筒观鸟镜是其中最受欢迎的品牌之一。在本文中,我们将探讨如何选择最适合自己的观鸟镜,并

    2023年11月6日
  • HDR是什么意思?是打开好还是关闭?,探究HDR技术的使用方法

    HDR是什么意思?是打开好还是关闭?(探究HDR技术的使用方法)随着科技的不断发展,HDR技术逐渐被广泛应用于各种设备中,例如电视、手机、相机等。但是,很多人对于HDR技术的使用方法还不是很清楚,甚至还存在一些误解。那么,HDR到底是什么

    2024年3月6日
  • 定位业务平台是什么

    定位业务是利用在移动通信网上增加相关定位业务实体,并通过支持定位功能的移动台向申请定位业务的移动用户提供全网范围内的定位服务。定位业务的实现包括获取位置信息(经度和纬度)以及利用获…

发表回复

登录后才能评论