1、borokerController创建(初始化)
环境变量设置
netty相关配置(socket发送缓存大小,接收缓存大小)
命令行参数配置及解析等相关处理
BrokerConfig、NettyServerConfig、NettyClientConfig、MessageStoreConfig
配置实例化
NettyServerConfig设置监听端口10911
启动参数添加broker配置
日志上下文设置
BrokerController实例化,入参是上面的几个相关配置
BrokerController初始化:
加载topics.json,consumeroffset.json,subscriptionGroup.json没有则加载备份
实例化消息存储
根据abort文件是否存在来判断最后一次是否正常退出,存在这个文件就不是,不存在便是正常退出
加载dealyOffset.json
加载commitLog,这不只一个文件,是一个列表,使用文件内存映射,一个文件一个G
加载消费队列:根据每个topic的队列文件,消息队列表添加topic的每个消息队列,每个队列文件也是大文件(但是和上面不一样,它的初始化大小不大)
若上次没有正常退出,加载索引文件并恢复,恢复commitLog(非正常方式),恢复topic队列表
NettyRemotingServer设置端口为NettyServerConfig的端口-2(这个端口的说明看最下面)
相关线程池实例化
相关处理器注册(查询、请求、通信等)
broker状态定时记录
消费偏移定时持久化(默认是5S,这意味着,消费端消费完消息,只是本地偏移更新,未持久化到broker这里,便非正常关闭消费端,下次重启的时候,未持久化消费进度的消息会重复消费)
消费状态或者能力定时监测并做相应处理(暂时这么命名)
定时打印拉消息,发消息队列大小
namesrv地址获取相关策略
从节点同步相关策略
BrokerController初始化完毕,添加关闭钩子,BrokerController实例化完成
2、BrokerController开启
DefaultMessageStore开启:相关线程开启
NettyRemotionServer开启
NettyRemotionServer(占有端口比broker少2)开启
其它几块开启(不描述了,目前不清楚具体作用)
注册broker(broker,namesrv等相关信息,会发送请求给namesrv)
定时注册broker任务开启
3、broker启动后会占用三个端口:
服务器监听端口(默认10911)
高可用端口(监听slave的请求),端口占用为服务器监听端口+1
快速服务器端口(VIP服务端口,也就是说客户端可以选择使用服务器监听端口或者这个端口通信,一般建议是设置VIP渠道为false的,即使用服务器监听端口通信【不设置就是10911这个端口】),这个端口的值为服务器监听端口-2