RocketMQ(一)基础概念理解及消息消费模式解析

前言

RocketMQ是一块分布式消息队列中间件,那么这个中间件主要可以为我们解决哪些问题呢?它和其他的主流消息中间件有什么不同呢?阿里巴巴在2012年开源了RocketMQ这个分布式消息队列中间件,在2016年11月捐赠给了Apache基金会。并且在2017年9月25日宣布毕业(即发布了第一个生产版本),成为了Apache顶级项目(TLP)之一。

RocketMQ是阿里巴巴中间件技术部(Aliware)在2012年开源的第三代分布式消息中间件,以其高性能、低延时和高可靠的特性承载了近年来双十一交易峰值(2016年为17万笔/秒),在整个生产链路上都有着稳定和出色的表现。

基础知识

消息模型

RocketMQ主要由 ProducerBrokerConsumer 三部分组成,其中Producer负责生产消息、Broker负责存储消息、Consumer负责消费消息。Broker在实际部署过程中作为单独的服务器部署,每个Broker可以存储多个Topic的消息,每个Topic的消息也可以分片存储于不同的 BrokerMessage Queue用于存储消息的物理地址,每个Topic中的消息地址存储于多个 Message Queue 中。ConsumerGroup 由多个Consumer 实例构成

基础概念

消息主题(Topic)

标识某一类消息的集合,每个主题**(Topic)**包含若干条消息。每条消息只能属于一个主题,Topic是RocketMQ进行消息订阅的基本单位。

消息标签(Tag)

为消息设置的标志,用于同一主题下区分不同类型的消息消息标签(Tag)和消息主题(Topic)的关系可以理解为大类和小类的关系。来自同一业务单元的消息,可以根据不同业务目的及作用,在同一主题设置不同的标签。标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性。

消息(Message)

消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。系统提供了通过Message ID和Key查询消息的功能。

消息生产者(Producer)

消息生产者,负责生产消息,一般由业务系统/应用服务负责生产发布消息( )。一个消息生产者会把业务应用系统中产生的消息发送到broker服务器。RocketMQ提供了多种消息发送方式:同步发送、一步发送、顺序发送、单向发送。其中同步发送和异步发送均需要Broker返回确认信息,单向发送则不需要

消息消费者(Consumer)

消息消费者,负责消费消息,一般由业务系统/应用服务负责消费生产者发布的消息( ),一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从我们应用的角度而言它提供了两种消费形式:拉取式消费、推动式消费。

代理服务器(Broker Server)

主要负责消息中转的角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取、消费消息的请求做准备。代理服务器也存储消息相关的元数据,包括消费组消费进度偏移消息主题队列消息等。

名称服务(Name Server)

名称服务充当路由消息的提供者,生产者或消费者能通过名称服务查找各个消息主题对应的Broker服务IP列表,多个**名称服务(Name Server)**实例可以组成集群,但是这些名称服务相对独立,互相之间没有信息交换。

消息生产者组(Producer Group)

同一类消息生产者(Producer)的集合,要求这类消息生产者发送同一类信息且发送逻辑一致。如果发送的是事务消息并且原始生产者在发送之后崩溃,则Broker服务器会联系同一生产者组的其他生产者实例以提交或回溯消费以保证消息的完整性

消息消费者组(Consumer Group)

同一类消息消费者(Consumer)的集合,这类Consumer通常消费同一类消息且消费逻辑一致,消费者组使得在消息消费方面,实现负载均衡和容错的目标变得非常容易。要注意的是,消费者组的消费者实例必须订阅完全相同的Topic。RocketMQ 支持两种消息模式:集群消费(Clustering)广播消费(Broadcasting)。

RocketMQ消息的两种消费模型

广播消费(Broadcasting)

广播消费模式下,相同消息**消费者组(Consumer Group)**的每个消费者(Consumer)实例都接收全量的消息。即在该模型下,每一条消息会被消费者组内的每一个消费者成员消费读取到。

集群消费(Clustering)

集群消费模式下,相同**消费者组(Consumer Group)的每个消费者(Consumer)实例平均分摊消息。即该模型下,每条消息只能被消费者组(Consumer Group)**内的一个消费者成员消费读取到。

RocketMQ的两种消息消费顺序

普通顺序消息(Normal Ordered Message)

普通顺序消费模式下,消费者通过同一个消费队列收到的消息是有序的,不同消息队列收到的消息可能是无序的。

严格顺序消息(Strictly Ordered Message)

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

RocketMQ消费消息的两种方式

拉取式消费(Pull Consumer)

Consumer消费的一种类型,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。

推动式消费(Push Consumer)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清晨先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值