broker启动主要过程

一、读取启动配置文件
二、加载本地数据文件
1、加载topics.json
2、加载consumerOffset.json
3、加载subscriptionGroup.json
4、加载consumerFilter.json
5、判断abort文件是否存在:存在表示上一次broker是异常启动
6、加载delayOffset.json
7、加载commitLog文件
8、加载consumeQueue文件
9、加载checkpoint文件
10、加载index文件
    1)如果上一次是异常退出,则比较index文件的endTimestamp(最后索引的时间)与checkpoint中的getIndexMsgTimestamp时间
    2)如果endTimestamp大,则删除该index文件,否则正常加载index文件
三、根据上一次是否异常退回修复文件
1、检测修复 consumeQueue文件:遍历每个主题下面queueId对应的所有文件
   1)读取最后3个consumeQueue文件,如果不到3个文件,就从头开始读取
   2)获取文件中每个数据,进行判断是否正常,直到所有数据都读取完或发现错误
   3)设置mappedFileQueue中的flushWhere与committedWhere值为最后正常的processOffset
   4)删除processOffset之后的数据
2、检测修复 commitLog文件
   2.1、如果上一次正常退出
       1)读取最后3个 commitLog文件,如果不到3个文件,就从头开始读取
       2)获取文件中每个数据,进行判断是否正常,直到所有数据都读取完或发现错误
       3)设置mappedFileQueue中的flushWhere与committedWhere值为最后正常的processOffset
       4)删除processOffset之后的数据
   2.2、如果上一次异常退出
       1)从最后一个commitLog文件开始遍历,进行数据比对,选择合适的一个commitLog文件开始恢复
       2)获取文件中的第一条消息存储的时间,跟checkpoint中的MinTimestamp或getMinTimestampIndex做对比,如果storeTimestamp小于该时间,则从这个文件开始恢复
       3)开始从这个文件读取数据,并对比body的CRC码进行判断是否正常,如果是正常的,做一次分发,将数据同步到consumeQueue与index中(这里可能会导致部分数据重复)
       4)设置mappedFileQueue中的flushWhere与committedWhere值为最后正常的processOffset
       5)删除processOffset之后的数据
3、设置commitLog中的 setTopicQueueTable
 
四、设置各种线程池,并与对应的业务做注册
例子:
this.remotingServer.registerProcessor(RequestCode.SEND_MESSAGE,sendProcessor,  this.sendMessageExecutor);
 
五、设置定时循环任务
1、定时统计broker数据
2、定时持久化消费者的Offset
3、定时持久化消费者过滤信息
4、定时检测是否开启broker保持
5、定时打印流量情况
6、定时打印分发数据情况
7、如果nameSrv是从远程获取的,则定时从远处获取
8、如果是slave节点,则定时从master同步集群信息,如果是master节点,则定时打印master与slave的不同
 
六、主线程启动
1、检测是否获取锁,没有获取就抛出异常
2、启动consemeQueue的刷盘线程
3、启动commitLog相关的刷盘线程
   1)启动commitLog刷盘线程
   2)如果启动了TransientStorePoolEnable参数,则启动commit线程
4、启动存储统计线程
5、启动延迟队列线程
6、设置reputMessageService开始的ReputFromOffset值并启动
7、同步线程启动
8、创建临时文件
9、启动定时清理文件线程
10、启动定时自我检测线程
11、启动服务端口
12、启动fastRemotingServer
13、启动fileWatchService
14、brokerOuterAPI
15、pullRequestHoldService
16、clientHousekeepingService
17、filterServerManager
18、向namesrc注册,并开启任务进行注册
 
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风中情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值