目录
nameServer主要功能及发送、消费者发送、消费的重平衡机制
最近一直在结合着RocketMQ技术内幕学习rocketMQ源码,看完之后有了大概的认识,为了加深印象和树立大致的rocketMQ的运行流程,所以整理了几个MQ的核心流程图,包含了通常的消息的流转脉络,希望自己以后温故知新的同时,发出来给大家评判,如果有些细节意见不同,欢迎留言,一起探讨,共同进步。
nameServer主要功能及发送、消费者发送、消费的重平衡机制
普通、顺序、延迟消息主要流程
补充:上图同步刷盘时间间隔是10ms,不是10s
事务消息核心流程
broker主从相关
主从同步数据
从服务器间隔5秒,将当前commitLog的最大偏移量作为参数请求主服务器,去拉取单次最大32KB的消息数据,对于从服务器来说,是发送下次待拉取消息的偏移量,而对于主服务器来说,既可以认为是从服务器本次请求拉取的消息偏移量,也可以理 解为从服务器的消息同步ACK确认消息,得到返回的数据后添加commitLog中,唤醒ReputMessageService,去执行异步的consume Queue、IndexFile的异步添加(consumerQueue、IndexFile异步落盘,consumerQueue一秒一次,IndexFile生成新文件的时机将indexFile落盘)
主从读取消息:
diff > memory时建议下次从从服务器拉取 (剩余需要拉取的消息的偏移量值 > memory总物理内存40%的数据量 ,表示主服务器繁忙,此时才建议从从服务器拉取消息) 如果主服务器繁忙则建议下一次从从服务器拉取消息,设置suggestWhichBrokerId为配置文件中的 whichBrokerWhenConsumeSlowly属性,默认为1。如果一个主服务器拥 有多台从服务器,参与消息拉取负载的从服务器只会是其中一个
从节点同步topic、消费偏移量等信息
handleSlaveSynchronize启动的间隔10s发起syncAll()请求,向主broker发起topic、消费偏移量的最新数据同步请求。