RocketMQ的高可用集群部署
RocketMQ的高可用集群部署
标签(空格分隔): 消息队列 部署
1. RocketMQ 集群物理部署结构
Rocket物理部署结构
Name Server: 单点,供Producer和Consumer获取Broker地址, 类似于注册中心.
Producer: 产生并发送消息.
Consumer: 接收并消费消息.
Broker: 消息暂存,消息转发.
1.1 Name Server
Name Server做的是Rocket的寻址服务, 用于将Broker的路由信息做聚合. 客户端依靠Name Server决定去获取对应topic的路由信息,从而决定对那些Broker做链接.
Name Server是一个几乎无状态的节点,Name Server之间采用Share-Nothing的设计, 互不通信.
对于一个
Name Server集群列表, 客户端链接Name Server的时候会随机选择一个节点, 以做到负载均衡.
Name Server所有状态都从Broker上报上来, 本身不存储任何状态, 所有数据均在内存.
如果中途所有的Name Server都挂了, 只会影响到路由信息的更新, 并不会影响到和
Broker的通信.(Eureka 的本地缓存服务注册信息 )
1.2 Broker
Broker是做消息存储,转发的服务器.
Broker以group分开,每个group只允许一个master,若干个slave.
一个master可以有多个slave,但是一个slave只能有一个master.
只有master才可以进行写入操作,slave不允许.
slave从master中同步数据. 同步策略取决于master的配置, 可以采用同步双写,异步复制两种.
客户端消费可以从master和slave中消费. 在默认的情况下,消费者都从master消费, 在master挂掉之后, 客户端由于从Name Server中感知到Broker挂机,就会从slave消费. (尽量从master消费, 这样消息会比较及时, 不用牵扯到消息复制的延迟问题.)
2. RocketMQ集群物理部署结构
RocketMQ的部署结构有一下特点:
Name Server是一个无状态节点, 可以集群部署, 节点之间没有信息同步.Broker部署分为Master和Slave. 一个master对应多个slave,但是一个slave只可以有一个master, 他们之间的对应关系通过制定相同的BrokerName, 不同的BrokerId来定义,BrokerId为0表示master,非0表示Slave,Master也可以部署多个. 每个Broker与Name Server集群中的所有节点建立长连接, 定时注册Topic信息到所有Name Server.Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic信息,并且向提供服务的Topic服务的Master建立长连接, 并且定时向Master发送心跳.Consumer和Name Server集群中的其中一个节点(随机选择)建立长连接, 定期从Name Server取Topic路由信息, 并且向提供Topic服务的Master建立长连接, 且定时发送心跳.Consumer既可以从Master订阅消息,也可以从Slave订阅消息. 规则由Broker决定.
3. RocketMQ逻辑部署结构
3.1 Producer Group
用来表示一个发送消息的应用, 一个
Producer Group下包含多个Producer实例,可以使多个机器,也可以是一台机器的多个进程, 或者一个进程的多个Producer对象. 一个Producer Group可以发送多个Topic消息,Producer Group的作用如下:
- 标识一类的Producer
- 可以通过运维工具查询这个发送消息的应用下有多少个Producer实例.
- 发送分布式事务消息的时候,如果Producer中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认是无状态.
3.2 Consumer Group
用来表示一个消费消息应用,默认为一个Consumer Group下的多个Consumer以均摊的方式消费信息, 如果设置为广播方式的话,这个Consumer Group下的所有Consumer会消费全部的数据.
4. RocketMQ集群部署模式
4.1 单Master模式
也就是只有一个Master节点, 称不上是集群, 一旦这个Master节点宕机, 那么整个服务就不可用, 也就是自己学习的时候搞一搞.
4.2 多Master模式
多个Master节点组成集群, 单个Master节点宕机或者重启对应用没有影响.
- 优点: 所有模式中性能最高.
- 缺点: 单个Master节点宕机期间, 未被消费的消息在节点恢复之前不可用, 消息的实时性就收到影响.
- 注意: 使用同步技术可以保证消息不丢失, 同时Topic相对应的Queue应该分布在急群众的各个节点,而不是某个节点上,否则,该节点的宕机会导致对订阅该topic的应用造成影响.
4.3 多Master多Slave异步复制模式
在多Master的基础上, 每个节点都有至少一个的Slave, Master节点可读可写, 但是Slave节点只读不写, 类似于MySQL的主备模式.
- 优点: 在Master宕机的时候, 消费者可以从Slave读取消息, 消息的实时性不会受到影响, 性能几乎和多Master一样.
- 缺点: 异步复制的同步方式和能导致消息丢失.
4.4 多Master多Slave同步双写模式
同多Master多Slave异步复制模式类似, 区别在于Master和Slave之间的数据同步方式.
- 优点: 同步双写的同步模式能保证数据不丢失.
- 缺点: 发送翻个消息的RT越长, 性能相比异步复制低10%.
- 刷盘策略: 同步刷盘和异步刷盘(节点自身数据是同步还是异步存储)
- 同步方式: 同步双写和异步复制(一组Master和Slave之间的数据同步)
RocketMQ的高可用集群部署的更多相关文章
- rocketmq高可用集群部署(RocketMQ-on-DLedger Group)
rocketmq高可用集群部署(RocketMQ-on-DLedger Group) rocketmq部署架构 rocketmq部署架构非常多,都是为了解决一些问题,越来越高可用,越来越复杂. 单ma ...
- hbase高可用集群部署(cdh)
一.概要 本文记录hbase高可用集群部署过程,在部署hbase之前需要事先部署好hadoop集群,因为hbase的数据需要存放在hdfs上,hadoop集群的部署后续会有一篇文章记录,本文假设had ...
- (十)RabbitMQ消息队列-高可用集群部署实战
原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...
- RabbitMQ的高可用集群部署
RabbitMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RabbitMQ部署的三种模式 1.1 单一模式 单机情况下不做集群, 仅仅运行一个RabbitMQ. # docker-c ...
- MySQL MHA 高可用集群部署及故障切换
MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...
- Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)
之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...
- Hadoop部署方式-高可用集群部署(High Availability)
版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...
- Kubernetes容器集群 - harbor仓库高可用集群部署说明
之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...
- 【转】harbor仓库高可用集群部署说明
之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...
随机推荐
- vue项目打包后打开空白解决办法
1.记得改一下config下面的index.js中bulid模块导出的路径.因为index.html里边的内容都是通过script标签引入的,而你的路径不对,打开肯定是空白的.先看一下默认的路径. a ...
- 前端AES加密解密
最开始使用的aes-js的npm包,后来发现npm上面那个包只能加密16个长度的字节,非16个长度的字符串就会报错,后来使用的是crypto-js, AES总共有四种加密方式,我们使用的CBC方式: ...
- java后台生成并下载二维码
这个功能在项目开发中是很基础的,平时用到的也很多,这里简单记录一下,以便以后使用的时候参考 前提业务要求:前台页面展示数据,有下载按钮,点击下载,下载对应数据的二维码. 首先,在pom.xml文件中添 ...
- scrapycrawl 爬取笔趣阁小说
前言 第一次发到博客上..不太会排版见谅 最近在看一些爬虫教学的视频,有感而发,大学的时候看盗版小说网站觉得很能赚钱,心想自己也要搞个,正好想爬点小说能不能试试做个网站(网站搭建啥的都不会...) 站 ...
- 个人项目作业(wc.exe)
1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...
- foobox更新日志
2020-1-31, 6.1.5.1a 版(*) 跟进汉化版修正.(*) MusicTag升级到 1.0.4.0.(*) 部分图标改良,其他优化和修正.(+) 丰富网络功能,增加一个搜索源,一个榜单源 ...
- vscode如何配置debug,python正则表达式如何匹配括号,关于python如何导入自定义模块
关于vscode如何配置debug的问题: 1.下载安装好python,并且配置好 环境变量 2.https://www.cnblogs.com/asce/p/11600904.html 3.严格按照 ...
- Web_Servlet—— Servlet生命周期
第4章 Servlet生命周期(重要) 4.1 Servlet生命周期概述 1,应用程序中的对象不仅在空间上有层次结构的关系,在时间上也会因为处于程序运行过程中的不同阶段而表现出不同的状态和不同的行为 ...
- Vue中使用axios发送ajax请求
作为前后端交互的重要技巧--发送ajax请求,在Vue中我们使用axio来完成这一需求: 首先是下载axios的依赖, npm install --save axios vue-axios 然后在ma ...
- hdu1732 Pushbox bfs 细节比较多,需要注意
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1732/ 题目就是推箱子游戏,有三个箱子和三个洞,最终目标状态就是三个箱子到三个洞中,所以我们搜索的状态就是人的位 ...