RocketMQ学习一

简介

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

它提供了多种功能:

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

RocketMQ的系统组成

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

组成图【来源: 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之一: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 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值