分布式消息队列RocketMQ—个人笔记(尚硅谷老雷老师视频)
参考视频:【尚硅谷】RocketMQ教程丨深度掌握MQ消息中间件_哔哩哔哩_bilibili
第一章 RocketMQ概述
一、MQ概述
1、MQ简介
2、MQ用途
异步解耦
数据收集
3、常见MQ产品
关键词
|
ACTIVEMQ
|
RABBITMQ
|
KAFKA
|
ROCKETMQ
|
---|---|---|---|---|
开发语言
|
Java
|
ErLang
|
Java
|
Java
|
单机吞吐量
|
万级
|
万级
|
十万级
|
十万级
|
Topic
|
- | - |
百级Topic时会影响系统吞吐量
|
千级Topic时会影响系统吞吐量
|
社区活跃度
|
低
|
高 | 高 | 高 |
4、MQ常见协议
AMQP
二、RocketMQ概述
1、RocketMQ简介
2、RocketMQ发展历程
第二章 RocketMQ的安装与启动
一、基本概念
1 消息(Message)
2 主题(Topic)
3 标签(Tag)
4 队列(Queue)
5 消息标识(MessageId/Key)
二、系统架构
RocketMQ架构上主要分为四部分构成:
1 Producer
2 Consumer
不过,一个Topic类型的消息可以被多个消费者组同时消费。
注意,1)消费者组只能消费一个Topic的消息,不能同时消费多个Topic消息2)一个消费者组中的消费者必须订阅完全相同的Topic
3 Name Server
4 Broker
集群部署
5 工作流程
三、单击安装与启动
1、准备工作
将下载的安装包上传到Linux
解压。
2、修改初始内存
修改runbroker.sh
3、启动
4、发送/接收消息测试
5、关闭Server
四、 控制台的安装与启动
1 下载
2 修改配置
- 原来的端口号为8080,修改为一个不常用的
- 指定RocketMQ的name server地址
3 添加依赖
JAXB,Java Architechture for Xml Binding,用于XML绑定的Java技术,是一个业界标准,是一 项可以根据XML Schema生成Java类的技术
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.0</version>
</dependency>
<dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>2.3.0</version>
</dependency>
<dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-core</artifactId><version>2.3.0</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
4 打包
在rocketmq-console目录下运行maven的打包命令。
5 启动
6 访问
五、集群搭建理论
1 数据复制与刷盘策略
复制策略
复制策略是Broker的Master与Slave间的数据同步方式。分为同步复制与异步复制:
- 同步复制:消息写入master后,master会等待slave同步数据成功后才向producer返回成功ACK
- 异步复制:消息写入master后,master立即向producer返回成功ACK,无需等待slave同步数据成功
异步复制策略会降低系统的写入延迟,RT变小,提高了系统的吞吐量
- 同步刷盘:当消息持久化到broker的磁盘后才算是消息写入成功。
- 异步刷盘:当消息写入到broker的内存后即表示消息写入成功,无需等待消息持久化到磁盘。
1)异步刷盘策略会降低系统的写入延迟,RT变小,提高了系统的吞吐量2)消息写入到Broker的内存,一般是写入到了PageCache3)对于异步 刷盘策略,消息会写入到PageCache后立即返回成功ACK。但并不会立即做落盘操 作,而是当PageCache到达一定量时会自动进行落盘。
2 Broker集群模式
以上优点的前提是,这些Master都配置了RAID磁盘阵列。如果没有配置,一旦出现某Master宕机,则会发生大量消息丢失的情况。
Slave从Master同步的延迟越短,其可能丢失的消息就越少对于Master的RAID磁盘阵列,若使用的也是异步复制策略,同样也存在延迟问题,同样也可能会丢失消息。但RAID阵列的秘诀是微秒级的(因为是由硬盘支持的),所以其丢失的数据量会更少。
- 多Master+RAID阵列,其仅仅可以保证数据不丢失,即不影响消息写入,但其可能会影响到消息的订阅。但其执行效率要远高于多Master多Slave集群
- 多Master多Slave集群,其不仅可以保证数据不丢失,也不会影响消息写入。其运行效率要低 于多Master+RAID阵列
六、磁盘阵列RAID(补充)
3 关键技术
4 RAID分类
5 常见RAID等级详解
JBOD ,Just a Bunch of Disks,磁盘簇。表示一个没有控制软件提供协调控制的磁盘集合,这是 RAID 区别与 JBOD 的主要因素。 JBOD 将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。 JBOD 的数据存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。 JBOD 存储性能完全等同于单块磁盘,而且也不提供数据安全保护。
其只是简单提供一种扩展存储空间的机制,JBOD可用存储容量等于所有成员磁盘的存储空间之和
RAID1
RAID1 就是一种镜像技术,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为 50% 。 RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。 RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统将自动切换到镜像磁盘,不会影响使用。 RAID1是为了增强数据安全性使两块磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。 RAID1 拥有完全容错的能力,但实现成本高。
应用场景:对顺序读写性能要求较高,或对数据安全性要求较高的场景。
RAID10
RAID10是一个RAID1与RAID0的组合体,所以它继承了RAID0的快速和RAID1的安全。
简单来说就是,先做条带,再做镜像。发即将进来的数据先分散到不同的磁盘,再将磁盘中的数据做
镜像。
RAID01
RAID01是一个RAID0与RAID1的组合体,所以它继承了RAID0的快速和RAID1的安全。
简单来说就是,先做镜像再做条带。即将进来的数据先做镜像,再将镜像数据写入到与之前数据不同的磁盘,即再做条带。
RAID10要比RAID01的容错率再高,所以生产环境下一般是不使用RAID01的。
七、集群搭建实践
1 集群架构
这里要搭建一个双主双从异步复制的Broker集群。为了方便,这里使用了两台主机来完成集群的搭建。这两台主机的功能与broker角色分配如下表。
序号 | 主机名/IP | IP | 功能 | BROKER角色 |
---|---|---|---|---|
1 | rocketmqOS1 | 192.168.59.164 | NameServer + Broker | Master1 + Slave2 |
2 | rocketmqOS2 | 192.168.59.165 | NameServer + Broker | Master2 + Slave1 |
2 克隆生成rocketmqOS1
克隆rocketmqOS主机,并修改配置。指定主机名为rocketmqOS1。
3 修改rocketmqOS1配置文件
配置文件位置
要修改的配置文件在rocketMQ解压目录的conf/2m-2s-async目录中。
修改broker-a.properties
将该配置文件内容修改为如下:
# 指定整个broker集群的名称,或者说是RocketMQ集群的名称
brokerClusterName=DefaultCluster
# 指定master-slave集群的名称。一个RocketMQ集群可以包含多个master-slave集群
brokerName=broker-a
# master的brokerId为0
brokerId=0
# 指定删除消息存储过期文件的时间为凌晨4点
deleteWhen=04
# 指定未发生更新的消息存储文件的保留时长为48小时,48小时后过期,将会被删除
fileReservedTime=48
# 指定当前broker为异步复制master
brokerRole=ASYNC_MASTER
# 指定刷盘策略为异步刷盘
flushDiskType=ASYNC_FLUSH
# 指定Name Server的地址
namesrvAddr=192.168.59.164:9876;192.168.59.165:9876
修改broker-b-s.properties
将该配置文件内容修改为如下:
brokerClusterName=DefaultCluster
# 指定这是另外一个master-slave集群
brokerName=broker-b
# slave的brokerId为非0
brokerId=1
deleteWhen=04
fileReservedTime=48
# 指定当前broker为slave
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.59.164:9876;192.168.59.165:9876
# 指定Broker对外提供服务的端口,即Broker与producer与consumer通信的端口。默认
10911。由于当前主机同时充当着master1与slave2,而前面的master1使用的是默认端口。这
里需要将这两个端口加以区分,以区分出master1与slave2
listenPort=11911
# 指定消息存储相关的路径。默认路径为~/store目录。由于当前主机同时充当着master1与
slave2,master1使用的是默认路径,这里就需要再指定一个不同路径
storePathRootDir=~/store-s
storePathCommitLog=~/store-s/commitlog
storePathConsumeQueue=~/store-s/consumequeue
storePathIndex=~/store-s/index
storeCheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort
分布式消息队列RocketMQ—个人笔记(尚硅谷老雷老师视频)相关推荐
- 分布式消息队列RocketMQ(一)安装与启动
分布式消息队列RocketMQ 一.RocketMQ简介 RocketMQ(火箭MQ) 出自于阿里,后开源给apache成为apache的顶级开源项目之一,顶住了淘宝10年的 双11压力 是电商产品的 ...
- 分布式消息队列RocketMQ 快速入门
分布式消息队列RocketMQ 一 RocketMQ概述 概述 1.MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件,是一套提供了消息生产.存储.消费全过程API的软件系统. ...
- 分布式消息队列RocketMQ继承SpringBoot
一.介绍 Springboot 继承RocketMQ: com.alibaba.cloud spring-cloud-starter-stream-rocketmq 底层封装了 rocketmq-cl ...
- 分布式消息队列RocketMQ工作原理与应用(一)
第 1 章 RocketMQ概述 一.MQ概述 1 .MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产.存储.消费全过程API的软件系 ...
- 分布式消息队列RocketMQ与Kafka架构上的巨大差异之1 -- 为什么RocketMQ要去除ZK依赖?...
我们知道,在早期的RocketMQ版本中,是有依赖ZK的.而现在的版本中,是去掉了对ZK的依赖,转而使用自己开发的NameSrv. 并且这个NameSrv是无状态的,你可以随意的部署多台,其代码也非常 ...
- 分布式消息队列RocketMQ与Kafka的18项差异之“拨乱反正“之2
在前1篇,我讨论了RocketMQ与Kakfa的对比中,几个不太严谨的地方.本着严谨的精神,不偏袒任何一方,本篇想分析一下RocketMQ在Kafka的基础上,的确做的几个改进.有不对之处,敬请指正. ...
- 分布式消息队列RocketMQ与Kafka的18项差异之“拨乱反正”
我们知道,阿里的RocketMQ其实源自Kafka.同时网络上一直流传着1篇阿里中间件团队所写的RocketMQ与Kafka的18项差异的文章,并且被广泛转发.比如: http://blog.csdn ...
- 分布式消息队列RocketMQ(四):磁盘阵列RAID(补充)
磁盘阵列RAID 1 RAID历史 2 RAID等级 3 关键技术 镜像技术 数据条带技术 数据校验技术 4 RAID分类 软 RAID 硬 RAID 混合 RAID 5 常见RAID等级详解 JBO ...
- linux一些常用指令(根据尚硅谷韩顺平老师视频所写,都是自己手打的)
` vim和vi的基本介绍 所有的 Linux 系统都会内建 vi 文本编辑器. Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别 语法的正确性,方便程序设计.代码补完. ...
最新文章
- python如何写生日快乐说说_高逼格祝福朋友生日快乐的说说
- c语言递归求塔移动次数,【C语言】Hanoi(汉诺)塔问题,求移动盘子的步骤(递归法)...
- android 插件化 模块化开发(apkplug)
- 控制科学对计算机能力的要求,0811控制科学与工程基本要求.pdf
- MySQL事务处理与事务隔离(锁机制)
- 中国互联网保险代理人生存状况调查报告
- linux内核字符驱动设备,Linux学习笔记——linux内核字符设备驱动-Go语言中文社区...
- 720. 词典中最长的单词
- c语言喂狗的作用,兽医忠告:用这几样食物喂狗,简直就是喂“砒霜”!
- 在IDEA中Java项目如何创建测试类(Junit测试工具)
- 北大青鸟软件工程师 ACCP6.0课程体系
- 负载均衡(Load Balance)
- (转)屈子:独立人格可与日月争光
- 用电脑看epub电子书用什么阅读软件好?
- python3.9安装numpy+mky_各种转码(bytes、string、base64、numpy array、io、BufferedReader )...
- C# BLE蓝牙开发之使用Windows.Devices.Bluetooth获取小米体重秤的体重
- Vue响应式原理详细讲解
- TDengine与InfluxDB对比测试
- 【电源专题】线性稳压器基础(线性稳压器是哪里线性了?)
- 威佐夫博弈matlab,51nod1185 威佐夫游戏 V2 (模拟乘法)