RocketMQ:介绍和核心概念

一、概述

         RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具备以下特性:

  • 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
  • 支持事务消息
  • 支持多种语言客户端,如Java、C/C++、Python、Go
  • 支持可插拔的传输协议,如TCP、SSL、AIO
  • 内置消息跟踪功能,也支持 opentracing
  • 大数据与流生态系统的全面融合
  • 支持按时间或偏移量回溯消息
  • 在同一队列中,能够保证严格的消息顺序
  • 支持拉(pull)和推(push)两种消息消费模式
  • 单个队列,百万级消息堆积能力
  • 支持多种消息传递协议,如JMS和OpenMessaging
  • 分布式高可用的部署架构
  • 快速批处理消息交换系统
  • 支持多种消息筛选机制,如SQL和Tag
  • 提供Docker镜像用于隔离测试和云集群部署
  • 提供配置、指标和监控等功能丰富的控制台
  • 验证和授权

         它由四部分组成:NameServer 集群、Broker 集群、Producer 集群和 Consumer 集群,每一个都可以水平扩展,而且没有单一的故障。如图所示:
在这里插入图片描述
        1) NameServer:提供轻量级的服务发现和路由,每个 NameServer 记录完整的路由信息,提供等效的读写服务,并支持快速存储扩展,它包括两个特性:

  • Broker管理,接收来自Broker集群的注册和提供心跳机制检查Broker是否存活;
  • 路由管理,存储Broker集群的路由信息和客户顿查询的队列信息;

        2) Broker:通过提供轻量级的 Topic 和 Queue 机制来处理消息存储,同时支持推(push)和拉(pull)模式以及主从结构的容错机制,它包括几个重要的子模块,如图所示:
在这里插入图片描述

  • 远程调用模块:Broker的入口,处理来自客户端的请求;
  • 客户端模块:包括生产者/消费者,维护消费者主题的订阅;
  • 存储服务:提供简单的API去存储或查询物理磁盘中的消息;
  • 主从服务:提供数据在主Broker和从Broker间同步的机制;
  • 索引服务:根据键创建消息索引,提供消息快速查询;

        3) Producer:生产者,产生消息的实例,拥有相同 Producer Group 的 Producer 组成一个集群。

        4) Consumer:消费者,接收消息进行消费的实例,拥有相同 Consumer Group 的
Consumer 组成一个集群。

二、核心概念

        1) Producer:消息生产者,负责产生消息,一般由业务系统负责产生消息。它支持多种发送方式:同步、异步和单向。

        2) Producer Group:一类 Producer 的集合名称,这类 Producer 通常发送一类消息,且发送逻辑一致。

        注意,考虑到Produer在消息发送方面能力较强,允许每个Produer Group仅有一个实例,避免不必要的Producer实例化。

        3) Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费。它提供两种消费类型:

  • Pull Consumer,主动调用 Consumer 的拉消息方法从 Broker 拉消息,主动权由应用控制;
  • Push Consumer,通常向 Consumer 对象注册一个 Listener 接口,一旦收到消息,Consumer 对象立刻回调 Listener 接口方法(JMS规范的方式);

        4) Consumer Group:一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息,且消费逻辑一致。

        注意,RocketMQ使用该概念来实现负载均衡和容错的目标。同一个Consumer Group的Consumer实例,必须订阅相同的Topic。

        5) Topic消息的逻辑管理单位,用于将消息按Topic划分,是一个逻辑概念,消息存储不会按Topic分开。Producer将消息发往指定的Topic,Consumer订阅该Topic就可以收到这条消息。Topic跟发送方和消费方都没有强关联关系,发送方可以同时往多个Topic投放消息,消费方也可以订阅多个Topic的消息。

        6) Message:代表一条消息,使用MessageId唯一识别,用户在发送时可以设置messageKey,便于之后查询和跟踪。一个 Message 必须指定 Topic,相当于寄信的地址。Message 还有一个可选的 Tag 设置,以便消费端可以基于 Tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 Broker 上的消息,方便在开发过程中诊断问题。

        7) Message Queue:把一个Topic划分为多个“Sub-Topic,即是消息队列”。主要用于负载均衡,发送消息时,用户只指定Topic,Producer会根据Topic的路由信息选择具体发到哪个Queue上。Consumer订阅消息时,会根据负载均衡策略决定订阅哪些Queue的消息。

        8) Tag:标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。

        9) BrokerBroker是RocketMQ的核心模块,负责接收并存储消息,同时提供Push/Pull接口来将消息发送给Consumer。Consumer可选择从Master或者Slave读取数据。多个主/从组成Broker集群,集群内的Master节点之间不做数据交互。Broker同时提供消息查询的功能,可以通过MessageID和MessageKey来查询消息。Borker会将自己的Topic配置信息实时同步到NameServer。

        10) Name Server:可以看作是RocketMQ的注册中心,它管理两部分数据:集群的Topic-Queue的路由配置;Broker的实时配置信息。其它模块通过Nameserv提供的接口获取最新的Topic配置和路由信息。

  • Producer/Consumer:通过查询接口获取Topic对应的Broker的地址信息;
  • Broker:注册配置信息到NameServer, 实时更新Topic信息到NameServer;

        11) Message Model:消息消费模式。

  • 广播(Broadcast):一条消息会发送给所有Consumer,即使这些 Consumer 属于同一个 Consumer Group,消息也会被 Consumer Group 中的每个 Consumer 都消费一次;
  • 集群(Cluster):一条消息只会发送给一个Consumer;

        12) Message Order:消息顺序。

  • 有序的:消费消息的顺序要同发送消息的顺序一致,在 RocketMQ 中,主要指的是局部顺序,即一类消息为满足顺序性,必须 Producer 单线程顺序发送,且发送到同一个队列,这样 Consumer 就可以按照 Producer 发送的顺序去消费消息;
  • 并发的:并发消费消息时,消息消费的最大并发性仅限于消费者的线程池;

        13) Message Offset:RocketMQ在存储消息时会为每个Topic下的每个Queue生成一个消息的索引文件,每个Queue都对应一个Offset记录当前Queue中消息条数。


引用

Github
RocketMQ 架构
RocketMQ 核心概念

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值