RocketMQ架构
综述
RocketMQ是一个低延迟,高性能,可靠的,万亿级和灵活扩展的分布式消息和流平台。它包含四个部分:名字服务,代理,生产者,消费者。他们的每一个都可以水平扩展和无单点故障。
NameServer集群
代理通过提供轻量级TOPIC和QUEUE机制来处理消息存储。它们支持Push和Pull模型,包含容错机制(2个副本或3个副本),并在原始时间顺序中提供了大量的峰值和存储能力。此外,代理提供了灾难恢复、丰富的度量统计和警报机制,这些都在传统的消息传递系统中缺乏。
生产者集群
生产者支持分布式部署。分布式生产者发送消息到代理集群通过多重负载均衡模式。发送进程支持快速失败和低延迟。
消费者集群
消费者支持Push和Pull模式的的分布式部署。它也支持集群消费和消息广播。它提供了实时消息订阅机制和满足大多数的消费者需求。RocketMQ的网站提供了一个简单快速开始的指南,去帮助感兴趣的用户
NameServer
NameServer是主要关注两个特性的全功能服务。
- 代理管理。Nameserver接受代理集群的注册和提供心跳机制去检测代理是否存活。
- 路由管理。每个NameServer会保留关于代理的全部路由信息和客户端查询的queue信息。
我们知道,RocketMQ客户端从NameServer查询队列的路由信息,但是客户端如何寻找NameServerd的地址?
有五种办法从NameServer获得NameServer的地址列表到客户端:
- 编程方式,像 producer.setNamesrvAddr("ip:port")
- java选项,使用 rocketmq.namesrv.addr
- 环境变量,使用 NAMESRV_ADDR
- HTTP端点
代理服务
代理服务是负责消息存储和投递,消息查询,HA保证等等。
就像下图展示的,代理服务有几个重要的子模块:
- 远程模块,代理入口,处理客户端的请求。
- 客户端管理,管理客户端和维护消费者的topic订阅。
- 存储服务,提供简单的APIs在物理磁盘存储和查询消息。
- 高可用服务,在主代理和从代理节点提供数据同步特性。
- 索引服务,为指定key的消息构建索引和提供快速消息查询