美文网首页
RocketMQ架构和角色

RocketMQ架构和角色

作者: 黄靠谱 | 来源:发表于2019-02-07 13:31 被阅读73次

    参考

    官方角色的解释
    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

    核心作用:消息的存储、分发、查询、高可用保证

    1. 存储和查询:Store Service, provides simple APIs to store or query message in physical disk.
    2. 消息索引查询:Index Service, builds index for messages by specified key and provides quick message query.
    3. 消息高可用:provides data sync feature between master broker and slave broker.
    4. 消息容错性:contains fault tolerance mechanism (2 copies or 3 copies)
    5. 客户端管理:manages the clients (Producer/Consumer) and maintains topic subscription of consumer.
    6. 统计和短信报警功能:Brokers provide disaster recovery, rich metrics statistics, and alert mechanisms, all of which are lacking in traditional messaging systems
    7. 可扩展性强:可以通过添加queueNum、新增Broker来提高集群的性能(因为解耦了,Client直接和nameServer交互,新broker在nameServer注册成功就可以加入到工作中)

    Broker集群管理

    https://www.cnblogs.com/xuwc/p/9043764.html

    RocketMQ的Broker集群和solrCloud类似,有分片的功能:

    • 一个集群中支持多Master,Master之间不交互,是独立的分片,某一个分片宕机不会影响其它的分片(提高了rocketmq的并发处理能力、以及一定的容灾能力)
    • 每个Master可以拥有多个replica(Slave)
    1. RocketMQ集群方式:单Master模式、多Master模式、多Master多Slave模式
    2. 单个Master和其Slave之间数据同步:(同步复制、异步复制):SYNC_MASTER、ASYNC_MASTE,异步复制的话,如果Master挂了,但是新消息未复制到Slave会导致消息丢失
    3. Broker的数据持久化方式:ASYNC_FLUSH、SYNC_FLUSH,一种是CommitLog持久化成功就返回消息存储成功,一种是到了内存就返回成功,异步的方式进行持久化
    4. Master对所有的Producer可见,Salve对所有的Consumer可见。

    相关文章

      网友评论

          本文标题:RocketMQ架构和角色

          本文链接:https://www.haomeiwen.com/subject/fdowsqtx.html