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状态。

posted on 2019-12-14 17:17  yivy  阅读(472)  评论(0)    收藏  举报

导航