github上rocketmq地址:
https://github.com/apache/rocketmq 建议大家star一下
rocketmq主要的模块
-acl 权限控制 (https://blog.csdn.net/prestigeding/article/details/94317946)
-broker rabietmq的核心,消息基本在这里处理
-client 客户端实现
-filter 消息过滤
-logappender,logging 日志处理
-namesrv 存储路由信息/broker服务列表
-remoting 基于netty的通信实现
- store 存储及索引实现
- tools 集群管理工具,提供命令行操作
rocket的安装搭建
(贷款链接)
1.windos的单机部署
2.linux下的部署、docker环境下部署
3.多master无从节点
4.多master多从异步双写 部署
5.多master 多 slave 同步双写部署 (真正的高可用)
rocket的各种搭建部署结构
1.单机部署
1.启动namesrv
2.启动broker,broker会向namesrv注册信息
3.prodecer消息发送时 从namesrv获取broker信息,将消息存储到broker
4.customer消息消费时 从namesrv获取broker信息,将信息从broker获取
单机部署只能使用于local,应用解耦都伴随着高可用的问题。
在此图中,如若producer,namesrv,broker,customer都将导致服务链断裂。极端情况broker服务器磁盘坏掉,消息将永远丢失。
2.多master无从节点
me:这下应该没有问题了
同事:如果一台master宕机了呢?这台机器上的消息就不能被及时消费!另外万一这个master也磁盘坏了,消息也会丢失。
me:好吧,我还以为每个master上数据是同步的,原来是各管各的。
3.多master多从异步双写 部署
给master一个从节点,主节点收到消息异步同步到从节点。考虑到异步传输时master挂掉会有很少的数据异步丢失。虽然在主节点挂掉后,从节点可以继续工作。但是依然不是高可用。
4.多master 多 slave 同步双写部署 (真正的高可用,生产使用架构)
只有主节点和从节点都存储成功,才返回成功。保证了主从消息一致。
rocketmq架构角色作用
NameServer:
- NameServer是RocketMQ的寻址服务,存储Broker的路由信息以及配置信息,用户端(生成者消费者)依靠NameServer去选择对于的Broker服务
- NameServer集群成员之间互补通信
- NameServer本身不存储数据(内存中存有注册信息等,不持久化),其数据均来自Broker与用户端
Broker:
- Broker负责存储生产者发送的消息,并为消费者提供消费支撑。
- Broker以group分开,每个group只允许存在一个master
- Master、Slave之间数据同步可选择同步、异步复制,同理Master与Master之间也存在同步
- Broker向所有NameServer节点建立长连接,注册Topic信息
参考文章:
https://blog.csdn.net/lyly4413/article/details/80838716 rabitmq工作原理
https://blog.csdn.net/jlh912008548/article/details/88988514 rocketmq实战分享
https://www.cnblogs.com/shileibrave/p/9883817.html rocketmq架构及名词概念