前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RocketMQ简介

RocketMQ简介

原创
作者头像
会洗碗的CV工程师
发布2024-05-05 15:00:53
1170
发布2024-05-05 15:00:53
举报
文章被收录于专栏:消息中间件消息中间件

一、什么是MQ

消息:是MQ中最小的概念,本质就是一段数据。

队列:在MQ中使用队列的数据结构来存储消息。

MQ是把消息和队列结合起来,称为消息队列(MessageQueue),是基础数据结构中“先进先出”的一种数据结构。指把要

传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。

RocketMQ是一款纯Java、分布式、队列模型的消息中间件。它具有以下主要特点:

  1. 分布式:RocketMQ是分布式的,可以在多个服务器之间进行部署,从而支持大规模的消息传输和存储。
  2. 队列模型:RocketMQ使用队列模型进行消息传输,这使得消息的发送和接收更加有序和可靠。
  3. 多种消息类型:RocketMQ支持事务消息、顺序消息、批量消息、定时消息、消息回溯等多种消息类型,满足不同场景下的需求。
  4. 多种发送方式:RocketMQ提供同步发送、异步发送、顺序发送、单向发送等多种发送方式,可以根据业务需求进行选择。
  5. 消费者模型:RocketMQ中的消费者(Consumer)负责消费消息,一般是后台系统负责异步消费。从用户角度而言,提供了拉取式消费和推动式消费两种方式。
  6. Broker角色:Broker是消息中转角色,负责存储消息、转发消息。Broker可以部署为Master和Slave模式,实现高可用性和数据备份。

RocketMQ的主要使用场景包括实时日志收集、实时数据分析、分布式事务处理、消息通知和推送、分布式锁的实现等。在分布式系统中,RocketMQ可以作为消息中间件,实现系统之间的解耦和异步通信,提高系统的可靠性和性能。

此外,RocketMQ还提供了丰富的配置选项和API接口,方便用户进行定制化和集成。同时,RocketMQ也支持多种编程语言和平台,包括Java、Python、C++等,可以满足不同开发者的需求。

二、MQ的应用场景

系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。

串行方式注册流程:

并行方式注册流程:

异步解耦方式:

流量削峰:

应用系统如果遇到系统请求流量的瞬间猛增,有可能会将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提高系统的稳定性和用户体验。

举例:业务系统正常时段的QPS如果是1000,流量最高峰是10000,为了应对流量高峰配置高性能的服务器显然不划算,这时可以使用消息队列对峰值流量削峰。

三、各大MQ产品比较

特性

ActiveMQ

RabbitMQ

RocketMQ

Kafka

producer- consumer

支持

支持

支持

支持

发布-订阅

支持

支持

支持

支持

API完备性

多语言支持

支持Java优先

语言无关

只支持Java

支持Java优先

单机吞吐量

万级

万级

万级

十万级

消息延迟

微秒级

毫秒级

毫秒级

可用性

高(主从)

高(主从)

非常高(分布式)

非常高(分布式)

消息丢失

理论上不会丢失

理论上不会丢失

消息重复

可控制

理论上会有重复

文档完备性

提供快速入门

部署难度

社区活跃度

商业支持

阿里云

成熟度

成熟

成熟

成熟

成熟(日志领域)

特点

功能齐全,大量项目使用

借助于erlang语言并发能力,性能高

各环节分布式设计,主从HA,支持上万队列,多种消费模式,性能好

支行协议

openwire,stomp,rest,xmpp,amqp

amqp

自定义的一套(社区提供JMS--不成 熟)

持久化

内存,文件,数据库

内存,文件

磁盘文件

事务

支持

支持

支持

负载均衡

支持

支持

支持

管理界面

一般

有web console实现

部署方式

独立,嵌入

独立

独立

MQ

评价

ActiveMQ

优点:成熟的产品,已经在很多公司应用但规模不大,各种协议支持较好,有多重语言的客户端;缺点:其重点已放到activemq6.0产品appollo上去了,目前社区不活跃,且对5.x的维护较少;不适用于上千队列场景

RabbitMQ

优点:由于erlang语言的特点,产品性能较好,在互联网公司有较大规模应用,支持amqp协议,有多语言且支持amqp的客户端可用; 缺点:erlang语言难度大,集群不支持动态扩展

RocketMQ

优点:模型简单,接口易用,在阿里大规模应用;性能好,可大量堆积消息在broker中,支持多种消费,包括集群消费,广播消费,开发活跃度高,版本更新快; 缺点:没有在mq核心中实现JMS等接口,有些系统要迁移需要修改大量代码;支持的客户端语言不多,目前是java及c++,其中c++不成熟;

Kafka

优点:性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高。在日志领域比较成熟,被多家公司和多个开源项目使用; 缺点:Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长;消费失败不支持重试;支持消息顺序,但是一台代理宕机后,就会产生消息乱序;社区更新较慢;

四、发展历程

RocketMQ的发展历程可以追溯到2007年,当时阿里巴巴开始了一个名为“五彩石”的项目,其中的Notify系统成为了RocketMQ的雏形。接下来,随着阿里巴巴业务的快速发展,急需一款支持顺序消息、拥有海量消息堆积能力的消息中间件。

在2010年,B2B业务开始大规模使用ActiveMQ作为消息内核,但随着业务规模的扩大,ActiveMQ无法满足阿里巴巴的需求。因此,在2011年,阿里巴巴决定以文件系统作为存储研发了MetaQ,以满足对顺序消息和海量消息堆积的需求。

经过不断的探索和开发,MetaQ逐渐发展并成熟。在2012年,阿里巴巴参考Kafka的设计,基于对MetaQ的理解和实际使用,研发了一套通用消息队列引擎,也就是RocketMQ。自此,第一代真正的RocketMQ诞生,并命名为RocketMQ 3.0。

随着RocketMQ的不断发展,其性能和功能也得到了不断的提升和优化。在2015年,RocketMQ已经经历了多年双十一的洗礼,在可用性、可靠性以及稳定性等方面都有出色的表现。同时,随着云计算的兴起,阿里巴巴基于RocketMQ推出了Aliware MQ 1.0,开始为阿里云上成千上万家企业提供消息服务。

在2016年,RocketMQ进入了一个新的里程碑。MetaQ在双十一期间承载了万亿级消息的流转,展示了其强大的性能和稳定性。同时,阿里巴巴将RocketMQ捐献给Apache基金会,RocketMQ正式成为Apache的顶级项目。

至今,RocketMQ仍然在不断发展和完善中,推出了多个版本和升级日志,支持更多的功能和特性。例如,RocketMQ 4.2.0版本支持了传输层安全性、客户端支持log4j2、PushConsumer支持条数与大小维度的流控等新功能。这些功能和特性的不断完善,使得RocketMQ成为了一款功能强大、性能卓越的消息中间件产品,被广泛应用于各种分布式系统中。如下图所示

五、概念术语

  • 生产者和消费者

生产者负责生产消息,一般由业务系统负责生产消息,消费者即后台系统,它负责消费消息。

  • 消息模型(Message Model)

消息模型主要有队列模型和发布订阅模型,RabbitMQ采用的是队列模型,如下图所示

RocketMQ采用发布订阅模型,模型如图所示:

  • 主题(Topic)

表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位

  • 代理服务器(Broker Server)

消息中转角色,负责存储消息、转发消息。

  • 名字服务(Name Server)

名称服务管理代理服务器broker,相当于一个管理机构。

  • 生产者组(Producer Group)

同一类Producer的集合,这类Producer发送同一类消息且发送逻辑一致。

  • 消费者组(Consumer Group)

同一类Consumer的集合,这类Consumer通常消费同一类消息且消费逻辑一致。

  • 拉取式消费(Pull Consumer)

Consumer消费的一种类型,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获

取了批量消息,应用就会启动消费过程。

  • 推动式消费(Push Consumer)

Consumer消费的一种类型,该模式下Broker收到数据后会主动推送给消费端,该消费模式一般实时性较高。

  • 普通顺序消息(Normal Ordered Message)

普通顺序消费模式下,消费者通过同一个消息队列( Topic 分区,称作 Message Queue) 收到的消息是有顺序的,不同消息队列收到的消息则可能是无顺序的。

  • 严格顺序消息(Strictly Ordered Message)

严格顺序消息模式下,消费者收到的所有消息均是有顺序的。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是MQ
  • 二、MQ的应用场景
  • 三、各大MQ产品比较
  • 四、发展历程
  • 五、概念术语
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档


http://www.vxiaotou.com