今天给大家分享一篇我对学习 RocketMQ 系统架构核心知识点的梳理和总结,在讲解时力求精简、通俗易懂,通过图解来给正在学习 RocketMQ 的小伙伴带来帮助。
RocketMQ 是阿里巴巴的分布式消息中间件,在 2012 年开源,在 2017 年成为 Apache 顶级项目。
1 集群架构
RocketMQ 的集群架构如下图:
从上图可以看到,整个集群中有四个角色: Name Server集群、Broker主从集群、Producer、Consumer。
1.1 Name Server 集群
Name Server 集群部署,但是节点之间并不会同步数据,因为每个节点都会保存完整的数据。因此单个节点挂掉,并不会对集群产生影响。
1.2 Broker
Broker 采用主从集群,实现多副本存储和高可用。每个 Broker 节点都要跟所有的 Name Server 节点建立长连接,定义注册 Topic 路由信息和发送心跳。
跟所有 Name Server 建立连接,就不会因为单个 Name Server 挂了影响 Broker 使用。Broker 主从模式中, Slave 节点主动从 Master 节点拉取消息。
1.3 Producer
Producer 跟 Name Server 的任意一个节点建立长连接,定期从 Name Server 拉取 Topic 路由信息。Producer 是否采用集群,取决于它所在的业务系统。
1.4 Consumer
Consumer 跟 Name Server 的任意一个节点建立长连接,定期从 Name Server 拉取 Topic 路由信息。Consumer 是否采用集群,取决于它所在的业务系统。
Producer 和 Consumer 只跟任意一个 Name Server 节点建立连接,因为 Broker 会向所有 Name Server 注册 Topic 信息,所以每个 Name Server 保存的数据其实是一致的。
2 MessageQueue
Producer 发送的消息会在 Broker 的 MessageQueue 中保存,如下图:
有了 MessageQueue