RocketMq原理理解
一、集群式部署
可以多台机器部署,可以将并发分散到各个机器上(想象成负载均衡策略)
二、分布式存储
不能保证发送过来的消息能马上被消费,为了避免大量消息堆积,采用分布式存储,将消息按照某种策略分散到不同的机器上。
三、高可用保障
采用主从模式,为了保证master broker宕机后数据丢失,master broker收到消息后同步到slave broker。
四、数据分发
生产者生产了消息,怎么知道该发送到哪个broker上,所以RocketMQ为了解决这个问题,有一个NameServer的概念,他也是独立部署在几台机器上的,然后所有的Broker都会
把自己注册到NameServer上去(包括master和slaver),每次生产或者消费消息的时候先去NameServer上找到路由信息,具体该去哪个broker。
如果name server故障了,整个架构还能正常运行吗?回答能,首先他是集群部署的,每一个都有相同的其他的broker的注册信息,假设所有都故障了,生产者和消费者本地会
有历史缓存。
五、如何保证数据不丢失
1、生产者
生产者发送消息宕机了,后续会重复发送。
2、消费者
消费者消费消息失败了,会再次消费。
3、broker
至少保证消息同步到一个slave,才返回消息发送成功
六、rocket mq架构图

Broker会每隔30秒发送心跳(TCP长连接)到所有的NameServer上去,然后每个NameServer都会每隔10s检查一次有没有哪个Broker超过120s没发送心跳的,如果有,就认为
那个Broker已经宕机了,从路由信息里要摘除这个Broker。
七、broker的存储架构
1、Broker是基于OS操作系统的PageCache和顺序写两个机制,来提升写入CommitLog文件的性能的
首先Broker是以顺序的方式将消息写入CommitLog磁盘文件的,也就是每次写入就是在文件末尾追加一条数据就可以了,对文件进行顺序写的性能要比对文件随机写的性能提升很多。

2、同步刷盘和异步刷盘各自的优缺点:高吞吐写入+丢失数据风险,写入吞吐量下降+数据不丢失
八、基于dledger实现broker高可用切换
1、DLedger是如何基于Raft协议选举Leader Broker的?
当master宕机后,通过raft协议,选举出新的leader。
Raft协议中选举leader算法的简单描述,简单来说,他确保有人可以成为Leader的核心机制就是一轮选举不出来Leader的话,就让大家随机休眠一下,先苏醒过来的人会投票给
自己,其他人苏醒过后发现自己收到选票了,就会直接投票给那个人。
2、DLedger是如何基于Raft协议进行主从同步的?
简单来说,数据同步会分为两个阶段,一个是uncommitted阶段,一个是commited阶段
Leader Broker上的DLedger收到一条数据之后,会将消息置为uncommitted,然后同步给follower broker,接着Follower Broker的DLedgerServer收到uncommitted消息之后,必
须返回一个ack给Leader Broker的DLedgerServer,然后如果Leader Broker收到超过半数的Follower Broker返回ack之后,就会将消息标记为committed状态。
然后Leader Broker上的DLedgerServer就会发送commited消息给Follower Broker机器的DLedgerServer,让他们也把消息标记为comitted状态。
浙公网安备 33010602011771号