RocketMQ学习一

简介

[简介来源github项目自述]Apache RocketMQ是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。(由阿里巴巴开源

它提供了多种功能:

  • 消息传递模式,包括发布/订阅、请求/回复和流式传输
  • 金融级交易信息
  • 基于DLedger的内置容错和高可用性配置选项
  • 多种跨语言客户端,如Java、C/C++、Python、Go、Node.js
  • 可插拔传输协议,例如 TCP、SSL、AIO
  • 内置消息追踪能力,也支持opentracing
  • 多功能大数据和流媒体生态系统集成
  • 按时间或偏移量追溯消息
  • 可靠的 FIFO 和严格有序的消息在同一个队列中
  • 高效拉推消费模式
  • 单队列百万级消息积累能力
  • JMS 和 OpenMessaging 等多种消息传递协议
  • 灵活的分布式横向扩展部署架构
  • 闪电般的批量消息交换系统
  • 各种消息过滤机制,例如 SQL 和 Tag
  • 用于隔离测试和云隔离集群的 Docker 映像
  • 用于配置、指标和监控的功能丰富的管理仪表板
  • 身份验证和授权
  • 免费的开源连接器,用于源和接收器
  • 轻量级实时计算

RocketMQ的系统组成

整体可以分成4个角色,分别是:Producer,Consumer,Broker以及NameServer;

RocketMQ学习一_第1张图片 组成图【来源: RocketMQ之一:RocketMQ整体介绍 - Oops!# - 博客园】

 1、Name Server

消息队列的协调者,Broker向它注册路由信息;是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。在消息队列 RocketMQ 中提供命名服务,更新和发现 Broker 服务

两个功能:

  1. 接收broker的请求,注册broker的路由信息
  2. 接收client(producer/consumer)的请求,根据某个topic获取其到broker的路由信息
    NameServer没有状态,可以横向扩展。每个broker在启动的时候会到NameServer注册;Producer在发送消息前会根据topicNameServer获取路由(到broker)信息;Consumer也会定时获取topic路由信息。

2、Broker

Broker是RocketMQ的核心,提供了消息的接收,存储,拉取等功能

Broker分为Master和Slave,一个Master可以对应多个Slave,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave;

因为broker是核心,一般都需要保证Broker的高可用,所以会配置Broker Slave,当Master挂掉之后,Consumer然后可以消费Slave;

对于master和slave;master可以对应多个slave,而slave只能对应一个master

每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。Broker 启动后需要完成一次将自己注册至 Name Server 的操作;随后每隔 30s 定期向 Name Server 上报 Topic 路由信息。

3、Producer

消息队列的生产者,需要与NameServer建立长连接Keep-alive,从NameServer获取Topic路由信息,并向提供Topic服务的Broker Master建立连接(连接ip由nameserver中获取)

4、Consumer

与 Name Server 集群中的其中一个节点(随机)建立长连接,定期从 Name Server 拉取 Topic 路由信息,并向提供 Topic 服务的 Master Broker、Slave Broker 建立长连接,且定时向 Master Broker、Slave Broker 发送心跳。Consumer 既可以从 Master Broker 订阅消息,也可以从 Slave Broker 订阅消息,订阅规则由 Broker 配置决定。

其它信息

Topic、Queue、message、tags

RocketMQ学习一_第2张图片 来源【 RocketMQ之一:RocketMQ整体介绍 - Oops!# - 博客园】

 

RocketMQ中的topic代表普通的消息队列,Queue是组成消息队列的更小单元【在JMS中,queue是只能被一个消费者消费,消费者消费topic的副本】

  • topic表示消息的第一级类型,比如一个电商系统的消息可以分为:交易消息、物流消息...... 一条消息必须有一个Topic。
  • Queue:主题被划分为一个或多个子主题,称为“message queues”。一个topic下,我们可以设置多个queue(消息队列)。当我们发送消息时,需要要指定该消息的topic。RocketMQ会轮询该topic下的所有队列,将消息发送出去。

Queue是Topic在一个Broker上的分片,在分片基础上再等分为若干份(可指定份数后的其中一份,是负载均衡过程中资源分配的基本单元。

集群消费模式下一个消费者只消费该Topic中部分Queue中的消息,当一个消费者开启广播模式时则会消费该Topic下所有Queue中的消息

message则是消息的载体,消息必须包含一个topic,相当于寄信地址,可选tags,用于消费者进行过滤消息

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

你可能感兴趣的:(消息队列,学习,消息队列)