RocketMQ技术内幕

第一章:前言

保证消息至少被消费一次,不承诺消息不被多次消费。

topic的路由信息无须在集群之间保持强一致,追求的是最终的一致性,容忍分钟不一致。

文件组,组内单个文件大小是固定的,方便引入映射机制。所有主题的消息基于的是顺序的读写,引入消息队列文件ConsumeQueue和索引文件indexFile。

内存映射机制。

设计的目标:

消息储存:内存映射,所有主题的消息顺序存储在同一个文件。

ACK信号的丢失无法保证只消费一次,可能被消费多次。

第七点:重复消费产生的原因。

-----------------------------------------------------------------------------------------------------------------------------------

第二章:RocketMQ 路由中心NameServer

Broker消息服务器启动的时候向所有的NameServer注册的。

消息的生产者在发送消息的时候先从NameServer获取Broker服务器的地址列表。

NameServer和每个Broker保持长连接,每隔30S检查Broker是不是存活。宕机就在注册表删除。

底层是netty的注意这点。

NameServer到底有哪些信息:

topic是路由信息。

解释:

nameServer里面有路由和broker的信息。

tpoic消息队列的路由信息,消息发送根据路由表进行负载均衡。

 一个Topic有多个消息队列。

一个Broker默认为每一个主题创建4个读队列和4个写队列。

路由的注册:

broker发送心跳包,nameServer进行扫描。

虽然路由表被移除了但是消费者和生产者扫描的话是由延迟的。

路由的删除:

路由的发现:

小结:

-----------------------------------------------------------------------------------------

第三章:消息发送:

消息的属性:tpoic body tag 多个key

---

生产者的启动流程,看下常用的方法:

消息的生产者,topic信息,这个应该是开启了没有主题的话就默认的创建主题:

发送可以指定消息队列发送的。

在message里面指定topic,发送消息可以指定发送的消息队列。

---

---

消息的发送流程:

      

         

第一步:消息长度验证

第二步:查找主题和路由的信息,选择消息队列:

 

遍历消息队列的信息:

一个topic可以对应多个broker。

默认的机制:

    

故障延时机制:

---

消息发送的具体的流程,消息的发送已经指定了消息队列指定了发送到哪个消息队列:

   

消息发送的步骤:

  

消息发送的种类:

同步发送 

异步发送 

单向发送

批量的消息发送:

      

批量消息发送是将同一主题的多条消息一起打包发送到服务端,

小结:

批量发送必须是同一主题下的多条消息。

----------------------------------------------------------------------------------------------------------------- 

第四章:RockerMQ消息储存

储存的文件:Comitlog ConsumeQueue IndexFile文件。

消息文件:Comitlog,RockerMQ将所有主题的消息储存在同一个文件中。保证消息发送顺序读写文件。

消息队列文件:ConsumeQueue,每个主题有多个消息队列,每一个消息队列有一个消息队列文件,这个是十分重要的。

索引文:IndexFile,根据消息的属性从Commitlog检索消息。

消息存储的类的信息:

        

        

        

      CommitLog文件:

         

注意什么是MappedFile就是commitlog文件夹下面的一个个文件。

        

   

消息存储到CommitLog是串行的,这个是必须的。

    

这个创建共享的内存区域就是为了内存映射使用的。

只是将MappedFile对应的内存映射到Buffer中。

步骤14是关于刷盘还是双写。

储存文件组织与内存映射:

 

分析下根据不同的维度查找MappwdFile。

1.

2.

3.

4.

commitLog文件:

ConsumeQueue文件:

查找消息的算法:

indexFile索引文件,消息订阅的索引文件。

 


 

不看具体的过程了。

--------------------------------------------------------------------------------

文件的刷盘机制:

内存映射。

同步刷盘。

异步刷盘。

过期文件的删除:看总结即可。

----------------------------------------------------------------------------------------------------------------------

小结:

-----------------------------------------------------------------------------------------

第五章:RocketMQ消息消费:

一个消费者组内可以包含多个消费者,每个消费者可以订阅多个主题。  

消息的推模的实现是基于拉模的。再封装。

一个消息队列同时只允许被一个消费者消费。

mq的消息消费:https://www.cnblogs.com/chen--biao/p/10166585.html

消息的拉取:

   

集群模式一个消息只允许被一个消费者消费。消费者组内维护一个线程池。

部分核心属性:

DefaultMQPushConsumer的主要属性:

消费者的启动流程:

消息重试是以消费组为单位不是主题为单位的。

消息的拉取:

每一个消费组维护一个线程池来消费消息。

单线程的消息拉取。

消息拉取的基本流程:

消息的长轮询的机制分析:

broker会存消费者组所有消费者的信息的。

一个消息队列同时只能有一个消费者消费,一个消费者可以消费多个消息队列。

消息的消费过程:

---

 

---

---

重试的步骤:

---

消息进度管理:

消费进度是主题和消费者组为键保存的。

---

定时消息:

总结:

整个流程的概述:

      

消息过滤的机制:

      

消息的拉取:

解锁的流程:

broker的名字,和消息队列的列表。

消费队列锁的实现:

 

总结:

--------------------------------------------------------------------------------------------------------------

第七章:RocketMQ的主从同步。

 

读写分离:

 

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值