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 ...
随机推荐
- 阿里云上docker部署nginx实现反向代理
简介 需要从镜像仓库找到所需要的nginx版本pull下来.(地址:https://hub.docker.com/) 1.docker pull nginx 1.挂载目录 1.1 获取nginx. ...
- Effective Go中文版(更新中)
原文链接:https://golang.org/doc/effective_go.html Introduction Go是一种新兴的编程语言.虽然它借鉴了现有语言的思想,但它具有不同寻常的特性,使得 ...
- Simulink仿真入门到精通(十八) TLC语言
TLC(Target Language Compiler)是一种为转换为目标语言而存在的额解释性语言,其目的就是将模型中编译出来的rtw文件转换为目标代码(C/C++等).与M语言类似,既可以写成脚本 ...
- 洛谷P1000超级马里奥的神奇解法
话说上过洛谷的都知道,有一道经典例题P1000超级马里奥,这一题,可以说是非常简单非常经典,但是就算如此,还是可以人才辈出,我是个比较循规蹈矩的人(雾),所以我的代码就比较平常,也就是直接输出了所要求 ...
- HashMap底层源码剖析
HashMap底层源码剖析 一.HashMap底层用到的数据结构 数组+单向链表+红黑树 数组:数组每一项都是一个链表,其实就是数组和链表的结合体 单向链表:当法神hash碰撞时,首先会找到数组对应位 ...
- JS排序算法--冒泡排序和选择排序
在我们JS语法当中,数据类型中的复杂数据类型,有一项我们常用的数组数据类型,其中存储的数据有时是乱序的,需要排序,我们有多种方法,最简单的肯定是 :变量.sort(fonction(a,b){a> ...
- 关于MySQL数据库事务的机制学习总结
这几天面试多次被问到了数据库事务机制.隔离级别.乐观锁悲观锁类的问题,之前对这些只能说有所了解,有些概念还停留在记忆层面,没有理解,所以回答的不好.后面翻书学习了下,理解了一些东西,在此做一个记录. ...
- Loadrunner 11安装和破解
一.安装环境和文件准备 1.操作系统:Windows Server 2008 R2 Enterprise: 2.loadrunner版本:loadrunner 11: 3.安装浏览器:火狐39.0: ...
- SpringMVC最详细笔记partⅠ
一.springMVC-quickStar 解决maven加载项目过慢 archetypeCatalog internal 导入依赖 <!-- 版本锁定 --> <propertie ...
- mybatis类型转换器 - 自定义全局转换enum
在数据模型.接口参数等场景部分属性参数为一些常量值,比如性别:男.女.若是定义成int或String类型,于是类型本身的范围太宽,要求使用者需要了解底层的业务方可知如何传值,那整体来看增加沟通成本,对 ...