下图是从官网摘过来的RocketMQ架构图
RocketMQ架构分为四个部分:NameServer,Broker,Producer,Consumer。其中每一部分都可以水平扩展以避免单点故障。
NameServer:NameServer集群的每一个节点都会记录完整的路由信息,提供可靠的读写服务,并支持存储扩展。NameServer负责管理以下两个部分:
- Broker Management:Broker集群的启动需要向NameServer注册,NameServer与Broker会建立心跳连接,随时检查一个Broker是否存活
- Routing Management:NameServer集群的每一个节点都会记录整个Broker集群完整的路由信息,与客户端(客户端指Producer和Consumer,下文同义)查询的queue信息
客户端可能需要从NameServer查询相关的路由信息,但是客户端怎么知道NameServer的地址?有以下四种方式进行配置:
- 在代码中使用如
producer.setNamesrvAddr("ip:port")
此类代码 - 在配置中配置
rocketmq.namesrv.addr
- 配置环境变量
NAMESRV_ADDR
- 直接使用HTTP Endpoint
如果以上四种方式都使用了,会有一个生效优先级:
编程方式 > 配置 > 环境变量 > HTTP Endpoint
Broker:RocketMQ的Broker使用轻量级的Topic和Queue存储消息,并支持容错机制,也就是会备份消息。Broker还提供灾难恢复,统计信息,警报机制。
以上是Broker的模块图,其中包括:
- Remoting Module:这是Broker的入口,处理来自客户端的请求
- Client Manager:管理客户端,并维持消费者的订阅信息
- Store Service:提供一组API存储或查询物理磁盘上的信息
- HA Service:处理主备Broker之间的数据同步
- Index Service:按指定的key为消息生成索引,以提供快速的消息查询
Producer:Producer集群向Broker集群发送消息时,会使用多种的负载均衡机制,以支持fast failure和低延迟
Consumer:Consumer也支持集群部署,同ActiveMQ一样支持消息广播。RocketMQ还支持实时消息订阅机制
最后放上来自官网的RocketMQ,ActiveMQ,Kafka对比图以供参考
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/20589.html