RocketMQ第一期:初步认识

本文主要介绍RocketMQ的整体概念。

JMS规范(先有规范后有天)

什么是JMS?

JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

JMS对象模型

ConnectionFactory 、 Connection 、 Session、 Destination(MQ/Topic)、 Message Producer、 Message Consumer。
RocketMQ第一期:初步认识

JMS消息模型

点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)。

JMS和MQ的关

  • MQ即消息队列,在分布式系统中,常用于应用解耦合、异步通信、流量削锋。
  • JMS是在各个厂商的MQ产品百花齐放的时候,Java大哥为了方便开发者使用而提供的厂商平台无关的API(规范),它规范了消息服务该做什么。
  • 事实上,Java经常制定各种各样的规范,类似的还有JDBC。

初识RocketMQ

前世今生

RocketMQ第一期:初步认识

RocketMQ是什么?

RocketMQ是一个分布式消息传递和流数据平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可伸缩性

RocketMQ诞生背景

  • Alibaba流量日益剧增
  • 高并发下,ActiveMQ IO模块遇到了瓶颈
  • Kafka在低延时、高可靠方面不能满足需求,无法支持更多的分区

RocketMQ架构设计

RocketMQ第一期:初步认识

RocketMQ特性

  • 消息查询:提供了三种消息查询的方式,分别是按 Message ID、Message Key 以及 Topic 查询。
  • 查询消息轨迹:通过消息轨迹,能清晰定位消息从生产者发出,经由RocketMQ 服务端,投递给消息消费者的完整链路,方便定位排查问题。
  • 集群消费和广播消费:当使用集群消费模式时,任意一条消息只需要被消费者集群内的任意一个消费者处理即可;当使用广播消费模式时,会将每条消息推送给消费者集群内所有注册过的消费者,保证消息至少被每台机器消费一次。
  • 重置消费位点:根据时间或offset重置消费进度,允许用户进行消息回溯或者丢弃堆积消息。
  • 死信队列:将无法正常消费的消息储存到特殊的死信队列供后续处理。

RocketMQ使用场景

异步解耦(以用户注册为例)

同步方式:

RocketMQ第一期:初步认识

RocketMQ方式:

RocketMQ第一期:初步认识

削峰填谷(秒杀为例)

秒杀场景流量大,下游系统可能无法承受突发的流量洪峰,可以利用RocketMQ强大的消息堆积能力将秒杀请求发送到RocketMQ。
RocketMQ第一期:初步认识

RocketMQ其他使用场景

  • 消息顺序收发
  • 分布式事务解决方案
  • 数据同步

RocketMQ vs Kafka

主要特性对比

RocketMQ第一期:初步认识

存储设计的差异

kafka

RocketMQ第一期:初步认识

RocketMQ

RocketMQ第一期:初步认识

Object Model

系统部署架构

RocketMQ第一期:初步认识

对象模型

  • Name Server:是一个几乎无状态节点,可集群部署,在RocketMQ 中提供命名服务,更新和发现 Broker 服务。
  • Broker:消息中转角色,负责存储消息,转发消息。分为 Master Broker 和 Slave Broker,一个 Master Broker 可以对应多个 Slave Broker,但是一个 Slave Broker 只能对应一个 Master Broker。Broker 启动后需要完成一次将自己注册至 Name Server 的操作;随后每隔 30s 定期向 Name Server 上报 Topic 路由信息
  • 生产者:与 Name Server 集群中的其中一个节点(随机)建立长链接(Keep-alive),定期从 Name Server 读取 Topic 路由信息,并向提供 Topic 服务的 Master Broker 建立长链接,且定时向 Master Broker 发送心跳。
  • 消费者:与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息,并向提供 Topic 服务的 Master Broker、Slave Broker 建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。Consumer 既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。

常用的核心概念

  • Message Key:消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。
  • Tag:消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类。
  • Group:一类 Producer 或 Consumer,这类 Producer 或 Consumer 通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。
  • Exactly-Once 语义:是指发送到消息系统的消息只能被 Consumer 处理且仅处理一次,即使 Producer 重试消息发送导致某消息重复投递,该消息在 Consumer 也只被消费一次。
  • 集群消费:一个 Group ID 所标识的所有 Consumer 平均分摊消费消息。
  • 广播消费:一个 Group ID 所标识的所有 Consumer 都会各自消费某条消息一次。
  • 全局顺序消息:对于指定的一个 Topic,所有消息按照严格的先入先出(FIFO)的顺序进行发布和消费。
  • 分区顺序消息:对于指定的一个 Topic,所有消息根据 Sharding Key 进行区块分区。同一个分区内的消息按照严格的 FIFO 顺序进行发布和消费。