IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> RocketMQ学习一-RocketMQ简介 -> 正文阅读

[大数据]RocketMQ学习一-RocketMQ简介

1 基本概念

1.1 消息(Message)

消息是指,消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。

1.2 主题(Topic)

Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。 topic:message 1:n message:topic 1:1
一个生产者可以同时发送多种Topic的消息;而一个消费者只对某种特定的Topic感兴趣,即只可以订阅和消费一种Topic的消息。 producer:topic 1:n consumer:topic 1:1
在这里插入图片描述

1.3 标签(Tag)

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

1.4 队列(Queue)

存储消息的物理实体。一个Topic中可以包含多个Queue,每个Queue中存放的就是该Topic的消息。一个Topic的Queue也被称为一个Topic中消息的分区(Partition)。
一个Topic的Queue中的消息只能被一个消费者组中的一个消费者消费。一个Queue中的消息不允许同一个消费者组中的多个消费者同时消费。
在这里插入图片描述

1.5 消息标识(MessageId/Key)

RocketMQ中每个消息拥有唯一的MessageId,且可以携带具有业务标识的Key,以方便对消息的查询。不过需要注意的是,MessageId有两个:在生产者send()消息时会自动生成一个MessageId(msgId),当消息到达Broker后,Broker也会自动生成一个MessageId(offsetMsgId)。msgId、offsetMsgId与key都称为消息标识。

  • msgId:由procedure端生成,生成规则为procedureIp + 进程pid + MessageClientIDSetter类的ClassLoader的hashCode + 当前时间 + AutomicInteger自增计数器
  • offsetMsgId:由broker端生成,其生成规则为 brokerIP + 物理分区的offset(queue中的偏移量)
  • key:由用户指定的业务相关的唯一标识

2 系统架构

RocketMQ架构上主要分为四部分组成:Producer、Consumer、Name Server、Broker
在这里插入图片描述

2.1 Procedure

消息生产者,负责生产消息。Producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败并且低延迟。
RocketMQ中的消息生产者都是以生产者组(Producer Group)的形式出现的。生产者组是同一类生产者的集合,这类Producer发送相同Topic类型的消息。一个生产者组可以同时发送多个主题的消息。

2.2 Consumer

消息消费者,负责消费消息。一个消息消费者会从Broker服务器中获取到消息,并对消息进行相关业务处理。
RocketMQ中的消息消费者都是以消费者组(Consumer Group)的形式出现的。消费者组是同一类消费者的集合,这类Consumer消费的是同一个Topic类型的消息。
消费者组使得在消息消费方面实现负载均衡(将一个Topic中的不同queue平均分配给同一个Consumer Group的不同Consumer)和容错(一个Consumer挂了,该Consumer Group中其他Consumer可以接着消费原Consumer消费的Queue)
在这里插入图片描述
消费者组中的Consumer数量应该<=topic中Queue的数量,如果超出Queue的数量,则多出来的Consumer将不能消费
在这里插入图片描述
不过一个Topic类型的消息可以被多个消费者组同时消费
注意

  • 消费者组只能消费一个Topic的消息,不能同时消费多个Topic的消息
  • 一个消费者组中的消费者必须订阅完全相同的Topic

2.3 Name Server

2.3.1 功能介绍

NameServer是Topic和Broker的注册中心,支持Broker的动态注册和发现
RocketMQ的思想来自于kafka,所以RocketMQ早期版本(3.0)之前也是依赖ZK,3.0及之后版本剔除ZK,引入NameServer
NameServer主要包括两个功能

  • Broker管理:接受Broker集群注册信息并保存下来作为路由信息的基本数据;提供心跳检测机制,检查Broker是否存活
  • 路由信息管理:每个NameServer中都保存着Broker集群的整个路由信息和用于客户端的查询队列信息,Procedure和Consumer通过NameServer可以获取整个Broker的路由信息,从而进行消息投递和消费

2.3.2 路由注册

在这里插入图片描述

2.3.3 路由剔除

在这里插入图片描述

2.3.4 路由发现

在这里插入图片描述

2.3.5 客户端NameServer选择策略

在这里插入图片描述

2.4 Broker

2.4.1 功能介绍

Broker充当消息中转者角色,负责存储消息、转发消息。Broker在RocketMQ系统中负责接收并存储从生产者发来的消息,同时为消费者拉取消息做准备。Broker同时也存储着消息相关的元数据,包括消费者组消费进度偏移offset,主题,队列等

2.4.2 模块构成

在这里插入图片描述
在这里插入图片描述

2.4.3 集群部署

在这里插入图片描述

2.5 工作流程

2.5.1 具体流程

在这里插入图片描述

2.5.2 Topic创建方式

在这里插入图片描述

2.5.3 读写队列

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:50:07  更:2021-12-02 16:50:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:50:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码