RocketMQ介绍与应用场景
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RocketMQ介绍与应用场景相关的知识,希望对你有一定的参考价值。
文章目录
1. RocketMQ介绍
1.1 RocketMQ介绍
RocketMQ是阿里开源的一款非常优秀中间件产品 ,脱胎于阿里的另一款队列技术MetaQ ,后捐赠给Apache基金会作为一款孵化技术 ,仅仅经历了一年多的时间就成为Apache基金会的顶级项目。
并且它现在已经在阿里内部被广泛的应用 ,并且经受住了多次双十一的这种极致场景的压力。 ( 例如:2017年的双十一 ,RocketMQ流转的消息量达到了万亿级 ,峰值TPS达到5600万 ) 。并且其内部通过Java语言开发 ,便于阅读与修改。
官网地址:http://rocketmq.apache.org/
中文文档:https://github.com/apache/rocketmq/tree/master/docs/cn
RocketMQ中的基本概念这里就不赘述了,同学们可以看一下官网的文档,也可以看我从官网上摘下来的(方便进不去GitHub的同学快速查看)https://blog.csdn.net/weixin_45525272/article/details/125936524
1.2 MQ的主要应用场景
MQ全称为Message Queue ,即消息队列 ,开发中消息队列通常有如下应用场景 :
应用场景 | 说明 |
---|---|
限流削峰 | MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进⾏处理,从⽽避免了请求的丢失或系统 被压垮。 |
异步&解耦 | 上游系统对下游系统的调⽤若为同步调⽤,则会⼤⼤降低系统的吞吐量与并发度,且系统耦合度太⾼。 ⽽异步调⽤则会解决这些问题。所以两层之间若要实现由同步到异步的转化,⼀般性做法就是,在这两层间添加⼀个MQ层。 即使消费者挂掉也不影响⽣产者⼯作,只要把消息放⼊队列即可,消费者收到消息后⾃⼰消费即可。 |
数据收集 | 分布式系统会产⽣海量级数据流,如:业务⽇志、监控数据、⽤户⾏为等。针对这些数据流进⾏实时或 批量采集汇总,然后对这些数据流进⾏⼤数据分析,这是当前互联⽹平台的必备技术。通过MQ完成此 类数据收集是最好的选择。 |
⼤数据处理 | ⽐如我们的平台向“三⽅平台”获取数据,⼀次请求了⼤量数据回来要进⾏处理,由于数据较多处理不过来,那么就可以放⼊MQ,再创建⼀些消费者进⾏数据处理即可。 |
1.3 MQ的应用场景举例
1、限流削峰
例如上文说的:阿里双十一 ,RocketMQ流转的消息量达到了万亿级 ,峰值TPS达到5600万 ,其中就要应用限流削峰,避免压垮系统
1、任务异步处理。
将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
例如:有个订单服务需要对订单进行数据持久层操作,在仓储表与物流表中进行订单信息的存储
用传统方式流程如下图所示 :
订单服务需要同步调用两个服务进行信息的持久化操作
我们使用消息队列改造后方式如下图所示:
交互流程如下 :
- 订单服务发消息到消息队列。
- 消息队列将消息发给仓储服务和物流服务。
- 仓储服务和物流服务接收到消息进行业务处理。
3、应用程序解耦合
MQ相当于一个中介 ,生产方通过MQ与消费方交互 ,它将应用程序进行解耦合。
就例如上图中 ,消息队列将订单服务和仓储服务进行解耦合 ,将订单服务和物流服务进行解耦合。
4、日志收集 :
进行统一业务日志收集 ,供分析系统进行数据分析 ,消息队列作为日志数据的中转站。
交互流程如下 :
1、采集系统从log日志文件采集数据 ,发送至消息队列 。
2、各日志需求服务从消息队列 接收消息进行日志处理。
1.4 消息队列技术选型对比
市场上还有哪些消息队列 ?
答:ActiveMQ ,RabbitMQ ,ZeroMQ ,Kafka ,MetaMQ ,Redis。
1.3.1 主流消息队列优缺点比较
消息队列 | 优点 | 缺点 |
---|---|---|
RabbitMQ | 1.支持AMQP协议 2.基于erlang语言开发 ,高并发性能较好 3.工作模式较为灵活 4.支持延迟消息 5.提供较为友好的后台管理页面 6.单机部署 ,1~2WTPS | 1.不支持水平扩容 2.不支持事务 3.消息吞吐量三者最差 4.当产生消息堆积 ,性能下降明显 5.消息重发机制需要手动设置 6.不支持消息重复消费 |
RocketMQ | 1.高可用 ,高吞吐量 ,海量消息堆积 ,低延迟性能上 ,都表现出色 2.api与架构设计更加贴切业务场景 3.支持顺序消息 4.支持事务消息 5.支持消息过滤 6.支持重复消费 7.支持延迟消息 8.支持消息跟踪 9.天然支持集群、负载均衡 10.支持指定次数和时间间隔的失败消息重发 11.单机部署 ,5~10WTPS | 1.生态圈相较Kafka有所不如 2.消息吞吐量与消息堆积能力也不如Kafka 3.不支持主从自动切换 4.只支持Java |
Kafka | 1.高可用 ,高吞吐量 ,低延迟性能上 ,都表现出色 2.使用人数多 ,技术生态圈完善 3.支持顺序消息 4.支持多种客户端 5.支持重复消费 | 1.依赖分区 ,消费者数量受限于分区数 2.单机消息过多时 ,性能下降明显 3.不支持事务消息 4.不支持指定次数和时间间隔的失败消息重发 |
当你项目要实现如下功能时,选用RocketMQ是一个不错的选择 :
- 支持事务消息
- 支持延迟消息
- 天然支持集群、负载均衡
- 支持指定次数和时间间隔的失败消息重发 详细的技术选型对比如下 :
以上是关于RocketMQ介绍与应用场景的主要内容,如果未能解决你的问题,请参考以下文章
云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析
当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?
RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ