源码分析RocketMQ之Broker-启动流程

源码分析RocketMQ之Broker-启动流程 
1、BrokerStartup.createBrokerController 方法创建BrokerController
  1、设置mq版本号环境变量
  2、设置broker的netty客户端的发送缓冲大小,默认是128 kb
  3、设置broker的netty客户端的接收缓冲大小,默认是128 kb
  4、命令行选项解析、相关配置的存储对象创建、设置10911监听端口,broker在启动的时候会开三个端口
     10911:接收消息推送的端口  10912:高可用的端口 10909:推送消息的vip端口
  5、创建消息存储配置,如果Broker是Slave角色,消息占用内存大小的比率 比默认的40% 还要小 10%
  6、在创建BrokerController时,会创建各种处理对象,下面列举一下这些核心类的作用
    1、前面准备的配置信息,brokerConfig、nettyServerConfig、nettyClientConfig、messageStoreConfig
    2、ConsumerOffsetManager: Consumer消费进度记录管理类
    3、TopicConfigManager:主题配置管理
    4、PullMessageProcessor:拉取消息请求处理器
    5、PullRequestHoldService:拉取消息请求hold服务,主要用于没有消息可拉取时挂起当前请求
    6、NotifyMessageArrivingListener:消息到达监听器,消息到达后通知对应请求拉取
    7、DefaultConsumerIdsChangeListener:消费者id改变监听器
    8、ConsumerManager:消费者管理
    9、ConsumerFilterManager:消费者过滤管理,用于每个消费者组对某个topic有不同的过滤逻辑,基于表达式
    10、ProducerManager:生产者管理
    11、ClientHousekeepingService:用于定期扫描异常(太久没有消息)的连接
    12、Broker2Client:broker作为客户端与producer或consumer通信组件
    13、SubscriptionGroupManager:订阅组管理,订阅组相当于消费者组
    14、BrokerOuterAPI:broker向外发送请求api服务
    15、FilterServerManager:过滤服务,一种高级的消息过滤机制,一个broker可以启动多个过滤服务
    16、SlaveSynchronize:从节点同步,用于向从节点同步数据
    17、LinkedBlockingQueue:一众阻塞队列,都是rocketmq中处理消息的线程池的阻塞队列,对于不同类型的消息有不同的处理器,对应各自的线程池
    18、BrokerStatsManager:Broker状态管理,也是一些参数相关,保存Broker运行时状态
    19、BrokerFastFailure:快速失败,快速失败默认为true,会直接返回
    20、Configuration:存储配置,存储路径、数据版本、读写锁
  7、controller.initialize() 初始化各种线程池和开启了很多定时任务
    1、加载 topic 相关配置、加载 不同的Consumer消费的进度情况 加载 订阅关系 加载 Consumer的过滤信息配置
    2、DefaultMessageStore:创建消息持久化组件
    3、DLedgerCommitLog:如果开启DLeger集群开关,则DLedger接管CommitLog的存储
    4、BrokerStats:创建Broker数据,主要记录了一些消息数的记录
    5、MessageStorePluginContext:创建消息存储插件相关上下文
    6、CommitLog分发器集合里添加一个Dispatcher,CommitLog分发器集合中主要存储了保存到CommitLog后需要分发的持久化服务,如consumerQueue文件,Index文件
    7、messageStore.load() 加载持久化数据
    8、数据加载成功,创建NettyRemotingServer netty服务器
    9、创建各种请求处理线程池
      1、
    10、注册各种请求处理器
      1、SendMessageProcessor:发送消息请求处理器
         1、处理业务操作房子业务线程池中执行
         2、根据RomotingCommand 的业务请求码code去processorTable这个笨蛋缓存变量中找到对应的processor
         3、封装成task任务后,提交给对应的业务processor处理线程池来执行
      2、PullMessageProcessor:拉取消息处理器 后续等等。
    11、ScheduledExecutorService:消费者消费偏移量持久化定时任务
    12、消费者过滤配置持久化定时任务
    13、保护broker定时任务,主要是定时把那些消费进度落后太多的消费者剔除
    14、打印水位定时任务,参考kafka
    15、打印还未分派的commit log的字节数定时任务
    16、非DLegerCommitLog 且当前角色是Slave时,Broker配置中指定了haMasterAddress,则赋值 HAClient 的 masterAddress
        将haMasterAddress的值设置到 HAService 的 HAClient 的masterAddress中
    17、如果配置中未指定Master的IP,则定期从Namesrv处更新获取
    18、如果是master 打印主从之间同步偏移量
    19、initialTransaction:根据spi初始化事务消息相关服务
    20、initialAcl:消息轨迹
    21、initialRpcHooks:根据spi注册Rpc钩子
  8、添加关闭钩子方法,返回创建controller对象、
2、start方法,调用controller.start() 启动各种服务start方法

你可能感兴趣的:(rocketmq源码系列,java,开发语言,中间件)