zoukankan      html  css  js  c++  java
  • RocketMQ原理及源码解析

     

    RocketMQ原理深入:

    一、定义:

    RocketMQ是一款分布式、队列模型的消息中间件,有以下部分组成:

    1、NameServer: 一个几乎无状态的节点,可集群部署,节点之间无任何信息同步

    2、Broker:RocketMQ的核心组成部分,通过轻量级的Topic和队列机制来维护消息存储,Broker支持消息PushPull模式。支持千亿级别的消息堆积能力

    3、Producer:消息生产者,和NameServer通信获取topic路由信息,和NameServer保持长连接以及和该生产者关联的所有broker保持长连接

    4、Consumer:消费者,单个消费者和一台nameserver保持长连接,定时查询topic配置信息,根据topic路由和broker保持长连接

    二、Broker集群方式

    1、master模式:这种方式风险较大,一旦Broker 重启或者宕机时,会导致整个服务不可用,不建议线上环境使用。

    2、master模式:一个集群无 Slave,全是 Master,例如:3 Master

       优点:配置简单,单个Master 宕机或重启维护对应用无影响,在磁盘配置为 RAID10 时,即使机器宕机不可恢复情况下,由与 RAID10 磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。

       缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。

    3、masterslave模式、异步复制

    每个 Master 配置一个 Slave,有多对Master-SlaveHA 采用异步复制方式,主备有短暂消息延迟,毫秒级。

       优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为 Master 宕机后,消费者仍然可以从 Slave 消费,此过程对应用透明。不需要人工干预。性能同多 Master 模式几乎一样。

       缺点:Master 宕机,磁盘损坏情况,会丢失少量消息。

    4、masterslave、同步双写

    每个 Master 配置一个 Slave,有多对Master-SlaveHA 采用同步双写方式,主备都写成功,向应用返回成功。

       优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高

       缺点:性能比异步复制模式略低,大约低 10%左右,发送单个消息的 RT 会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能。

    三、RocketMQ架构图:

    图片借鉴:

     

    四、RocketMQ源码分析:

    1、MQ功能模块:

     

    rocketmq-remoting:通信组件模块,提供通信需要的编码解码器,主要接口:

    a、RemotingService:顶级接口

    //nettyconfig配置启动NIO监听端口服务(ServerBootstrapserverBootstrap.bind().sync()

        public void start();

    //关闭服务端口

        public void shutdown();

    //注册rpc响应钩子

    public void registerRPCHook(RPCHook rpcHook);

    b、RemotingServer:实现RemotingService,提供注册请求处理器和调用方式

    c、RemotingClient:实现RemotingService,远程通信,Client接口

    d、ChannelEventListener:提供链接,关闭,异常,空闲事件监听接口

    主要接口图:

    Rocketmq-namesrv:对应NameServer服务实例,一些时序图:

     

    rocketmq-brokerBroker集群功能代码

    BrokerStartup:启动入口,提供命令参数解析,加载netty server,netty client,broker,messagestore配置初始化

    BrokerController:初始化topicManager,consumerOffsetManager加载offset,以及subscriptionGroupManager加载消费组信息,messagestore加载commit log组装consumer queue建立索引

    FilterServerManager: 是对rocketmq-filtersrv过滤服务模块封装的接口,提供Tag过滤支持

    ConsumerOffsetManager:消费进度管理

    SlaveSynchronizeslavemaster同步topicConfigoffset进度、delayOffset进度、subscribeptionGroup信息

    SubscriptionGroupManager:用来管理订阅组,包括订阅权限等

    TopicConfigManagerTopic配置管理

    SendMessageProcessor:处理客户端发送消息的请求

    QueryMessageProcessor:查询消息请求处理

    PullMessageProcessor:拉消息请求处理

    ClientManageProcessorClient注册与注销管理

    包路径信息:

    broker启动流程:

    rocketmq-store:存储层原理

    DefaultMessageStore:负责管理consumerqueue,commitlog

    ConsumeQueue:由topicqueueId组成

    Commitlog:负责消息存储

    MapedFileQueue:存储消息对应的位置

    MapedFile:消息对应磁盘位置

    类图:

    存储时序:

    rocketmq-client:包括producerconsumeradmin

    a、producer:提供了多种发送消息接口(回调,超时,指定MessageQueue),相关类图:

    a、Consumer:包括push建立长连接后的被动消费(subscribe),以及pull拉取方式

    MessageModel:集群和广播消费模式

    以下是接口对比:

    Pull拉取时序:

    Push时序:最终通过PullMessageService回调注册的回调函数PullCallback,在调用consumer注册的回调listener

  • 相关阅读:
    14.14DataSet数据集
    C#第六章学习代码
    C#第五章学习代码
    C#第四章学习代码
    C#第三章学习代码
    C#第二章学习的代码
    记录自学学习C#中写过的代码
    14._13数据集DataSet
    C#中数据库连接的几种写法
    视频、图形图像处理之Opencv技术记录(三)、相关文档页面的列表
  • 原文地址:https://www.cnblogs.com/junxing/p/10993993.html
Copyright © 2011-2022 走看看