参考
官方角色的解释
http://rocketmq.apache.org/docs/rmq-arc/
RocketMQ架构解析
https://www.jianshu.com/p/015a16347640
概述
image- 组成: name servers, brokers, producers and consumers
- Each of them can be horizontally extended without a single Point of Failure
NameServer Cluster
- Provider和Consumer都是直接和NameServer打交道的,使用时都是配置的nameServer,不用和Broker直接打交道,解耦
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("localhost:9876");
producer.start();
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() { });
- Namesrv用于存储Topic、Broker关系信息,功能简单,稳定性高。多个Namesrv之间相互没有通信,单台Namesrv宕机不影响其他Namesrv与集群;即使整个Namesrv集群宕机,已经正常工作的Producer,Consumer,Broker仍然能正常工作,但新起的Producer, Consumer,Broker就无法工作。
作用
- Broker Cluster管理(Broker注册和心跳检测):NameServer accepts the register from Broker cluster and provides heartbeat mechanism to check whether a broker is alive.
- 路由管理:each NameServer will hold whole routing info about the broker cluster and the queue info for clients query.
NameServer集群的配置:
- NameServer Cluster,每个节点都是全节点。
- Clients通过配置文件拼接Url的方式,启动的时候随机选取一台建立长连接,如果该Namesrv宕机,会自动连其他Namesrv。直到有可用的Namesrv为止。
- 生产者每30秒从Namesrv获取Topic跟Broker的映射关系,更新到本地内存中。再跟Topic涉及的所有Broker建立长连接,每隔30秒发一次心跳。
namesrvAddr = rocketmq-server1:9876;rocketmq-server2:9876
Broker Cluster
支持Consumer获取消息的两种模式:Push and Pull model
核心作用:消息的存储、分发、查询、高可用保证
- 存储和查询:Store Service, provides simple APIs to store or query message in physical disk.
- 消息索引查询:Index Service, builds index for messages by specified key and provides quick message query.
- 消息高可用:provides data sync feature between master broker and slave broker.
- 消息容错性:contains fault tolerance mechanism (2 copies or 3 copies)
- 客户端管理:manages the clients (Producer/Consumer) and maintains topic subscription of consumer.
- 统计和短信报警功能:Brokers provide disaster recovery, rich metrics statistics, and alert mechanisms, all of which are lacking in traditional messaging systems
- 可扩展性强:可以通过添加queueNum、新增Broker来提高集群的性能(因为解耦了,Client直接和nameServer交互,新broker在nameServer注册成功就可以加入到工作中)
Broker集群管理
https://www.cnblogs.com/xuwc/p/9043764.html
RocketMQ的Broker集群和solrCloud类似,有分片的功能:
- 一个集群中支持多Master,Master之间不交互,是独立的分片,某一个分片宕机不会影响其它的分片(提高了rocketmq的并发处理能力、以及一定的容灾能力)
- 每个Master可以拥有多个replica(Slave)
- RocketMQ集群方式:单Master模式、多Master模式、多Master多Slave模式
- 单个Master和其Slave之间数据同步:(同步复制、异步复制):SYNC_MASTER、ASYNC_MASTE,异步复制的话,如果Master挂了,但是新消息未复制到Slave会导致消息丢失
- Broker的数据持久化方式:ASYNC_FLUSH、SYNC_FLUSH,一种是CommitLog持久化成功就返回消息存储成功,一种是到了内存就返回成功,异步的方式进行持久化
- Master对所有的Producer可见,Salve对所有的Consumer可见。
网友评论