RocketMQ相关知识知多少(一)

简介: RocketMQ相关知识知多少(一)

一、RocketMQ的定义

Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。【RocketMQ是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式的特点,是采用java语言开发的分布式的消息系统。 】



RocketMQ领域模型

核心特性:

  • 云原生:无限弹性扩缩,K8S友好
  • 高吞吐:万亿级吞吐保证,同时满足微服务与大数据场景
  • 流处理:提供轻量、高扩展、高性能和丰富功能的流计算引擎
  • 金融级:稳定性,广泛用于交易核心链路
  • 架构极简:零外部依赖,Shared-nothing架构
  • 生态友好:无缝对接微服务、实时计算、数据湖等周边生态

二、消息模型

Apache RocketMQ 中消息的生命周期主要分为消息生产、消息存储、消息消费这三部分。


消息生产


生产者(Producer):


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


消息存储


主题(Topic):


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


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

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

消息消费

  • 消费者分组(ConsumerGroup):


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


  • 消费者(Consumer):

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


  • 订阅关系(Subscription):

Apache RocketMQ 发布订阅模型中消息过滤、重试、消费进度的规则配置。订阅关系以消费组粒度进行管理,消费组通过定义订阅关系控制指定消费组下的消费者如何实现消息过滤、消费重试及消费进度恢复等。


Apache RocketMQ 的订阅关系除过滤表达式之外都是持久化的,即服务端重启或请求断开,订阅关系依然保留。


【一个Topic分布在多个Broker上,一个Broker可以配置多个Topic,他们之间是多对多的关系。如果某个Topic消息量很大,应该给它多配置几个队列,并且尽量多分布在不同Broker上,以减轻某个Broker的压力。Topic消息量都比较均匀的情况下,如果某个broker上的队列越多,则该broker压力越大。】



三、功能特性

1.普通信息:

普通消息:一般应用于微服务解耦、事件驱动、数据集成等场景,这些场景大多数要求数据传输通道具有可靠传输的能力,且对消息的处理时机、处理顺序没有特别要求。




普通消息生命周期:


  • 初始化:消息被生产者构建并完成初始化,待发送到服务端的状态。


  • 待消费:消息被发送到服务端,对消费者可见,等待消费者消费状态。


  • 消费中:消息被消费者获取,并按照消费者本地的业务逻辑进行处理的过程。此时服务端会等待消费者完成消费并提交消费结果,如果一定时间内没有收到消费者的响应,RocketMQ会对消息进行重试。


  • 消费提交:消费者完成消费处理,并向服务端提交消费结果,服务端标记当前消息已经被处理(包括消费成功和失败)。RocketMQ 默认支持保留所有消息,此时消息数据并不会立即被删除,只是逻辑标记已消费。消息在保存时间到期或存储空间不足被删除前,消费者仍然可以回溯消息重新消费。


  • 消息删除:RocketMQ按照消息保存机制滚动清理最早的消息数据,将消息从物理文件中删除。
2.定时消息:

定时消息:使用 RocketMQ 的定时消息可以简化定时调度任务的开发逻辑,实现高性能、可扩展、高可靠的定时触发能力。

基于定时消息的超时任务处理具备如下优势:

  • 精度高、开发门槛低:基于消息通知方式不存在定时阶梯间隔。可以轻松实现任意精度事件触发,无需业务去重。
  • 高性能可扩展:传统的数据库扫描方式较为复杂,需要频繁调用接口扫描,容易产生性能瓶颈。RocketMQ 的定时消息具有高并发和水平扩展的能力

定时消息生命周期:

  • 初始化:消息被生产者构建并完成初始化,待发送到服务端的状态。
  • 定时中:消息被发送到服务端,和普通消息不同的是,服务端不会直接构建消息索引,而是会将定时消息单独存储在定时存储系统中,等待定时时刻到达。
  • 待消费:定时时刻到达后,服务端将消息重新写入普通存储引擎,对下游消费者可见,等待消费者消费的状态。


  • 消费中:消息被消费者获取,并按照消费者本地的业务逻辑进行处理的过程。 此时服务端会等待消费者完成消费并提交消费结果,如果一定时间后没有收到消费者的响应,RocketMQ 会对消息进行重试处理。
  • 消费提交:消费者完成消费处理,并向服务端提交消费结果,服务端标记当前消息已经被处理(包括消费成功和失败)。RocketMQ 默认支持保留所有消息,此时消息数据并不会立即被删除,只是逻辑标记已消费。消息在保存时间到期或存储空间不足被删除前,消费者仍然可以回溯消息重新消费。


  • 消息删除:Apache RocketMQ 按照消息保存机制滚动清理最早的消息数据,将消息从物理文件中删除。

【定时消息的实现逻辑需要先经过定时存储等待触发,定时时间到达后才会被投递给消费者。因此,如果将大量定时消息的定时时间设置为同一时刻,则到达该时刻后会有大量消息同时需要被处理,会造成系统压力过大,导致消息分发延,影响定时精度】


3.顺序消息:

.顺序消息:顺序消息仅支持MessageType为FIFO的主题,即顺序消息只能发送至类型为顺序消息的主题中,发送的消息的类型必须和主题的类型一致。和普通消息发送相比,顺序消息发送必须要设置消息组。(推荐MessageQueueSelector 的方式)。要保证消息的顺序性需要单一生产者串行发送。


单线程使用 MessageListenerConcurrently 可以顺序消费,多线程环境下使用 MessageListenerOrderly 才能顺序消费。

4.事务消息:

事务消息:是 Apache RocketMQ 提供的一种高级消息类型,支持在分布式场景下保障消息生产和本地事务的最终一致性。简单来讲,就是将本地事务(数据库的 DML 操作)与发送消息合并在同一个事务中。例如,新增一个订单。在事务未提交之前,不发送订阅的消息。发送消息的动作随着事务的成功提交而发送,随着事务的回滚而取消。


!!不建议单一进程创建大量生产者


!!不建议频繁创建和销毁生产者


四、消费者分类

RocketMQ 支持 PushConsumer 、 SimpleConsumer 以及 PullConsumer 这三种类型的消费者。【在实际使用场景中,PullConsumer 仅推荐在流处理框架中集成使用,大多数消息收发场景使用 PushConsumer 和 SimpleConsumer 就可以满足需求。】



RocketMQ相关知识知多少(二):https://developer.aliyun.com/article/1534544

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3月前
|
消息中间件 存储 JSON
RocketMQ概论
RocketMQ概论
29 0
|
3月前
|
消息中间件 Java Apache
RocketMQ相关知识知多少(二)
RocketMQ相关知识知多少(二)
|
3月前
|
消息中间件 存储 物联网
RocketMQ基础概念
RocketMQ基础概念
42 1
|
3月前
|
消息中间件 存储 缓存
技术好文:RocketMQ之一:RocketMQ整体介绍
技术好文:RocketMQ之一:RocketMQ整体介绍
50 0
|
11月前
|
消息中间件 存储 Cloud Native
RocketMQ 5.0 VS RocketMQ 4.x 变化知多少?
RocketMQ 5.0 VS RocketMQ 4.x 变化知多少?
371 0
|
消息中间件 存储 中间件
吐血总结——消息队列之RocketMQ知识梳理
消息队列主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。今天我就首先分析一下RocketMQ,目前公司用的也是这个,因此在进行一下梳理,加深一下印象。
239 0
|
消息中间件 存储 负载均衡
RocketMQ极简入门-RocketMQ的工作原理
RocketMQ架构上主要分为四部分,如上图所示 Producer 消息发布的角色,支持分布式集群方式部署。Producer通过MQ的负载均衡模块选择相应的Broker集 群队列进行消息投递,投递的过程支持快速失败并且低延迟。 Consumer 消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时 也支持集群方式和广播方式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。 Broker Broker主要负责消息的存储、投递和查询以及服务高可用保证。 NameServer NameServer是一个Broker与Topic路由的注册中心
282 0
|
消息中间件 中间件 RocketMQ
【Alibaba中间件技术系列】「RocketMQ技术专题」帮你梳理RocketMQ相关的消费问题以及原理分析总结
【Alibaba中间件技术系列】「RocketMQ技术专题」帮你梳理RocketMQ相关的消费问题以及原理分析总结
161 1
【Alibaba中间件技术系列】「RocketMQ技术专题」帮你梳理RocketMQ相关的消费问题以及原理分析总结
|
消息中间件 Kafka RocketMQ
消息中间件(RocketMQ)笔记
分布式消息中间件,主要是实现分布式系统中解耦、异步消息、流量销锋、日志处理等场景。生产中用的最多的消息队列有Activemq,rabbitmq,kafka,rocketmq等。 以 Jms 规范和 rocketmq 为主来分享。版本基于 3.2.6 。 主要分享:JMS规范、Rocketmq的介绍、部署方式、特性的一些使用。
消息中间件(RocketMQ)笔记
|
消息中间件 搜索推荐 Java
【深入浅出之透析RocketMQ原理及实战指南】精讲RocketMQ是什么 | 带你真正认识RocketMQ
【深入浅出之透析RocketMQ原理及实战指南】精讲RocketMQ是什么 | 带你真正认识RocketMQ
230 0
【深入浅出之透析RocketMQ原理及实战指南】精讲RocketMQ是什么 | 带你真正认识RocketMQ