RocketMQ

RocketMQ

2022-03-01  本文已影响0人  奋斗的韭菜汪

RocketMq常用管理命令链接:https://gper.club/articles/7e7e7f7ff3g58gc3g69
Open Message协议

结构简单、解析快、有事务设计、有持久化设计


rocketmq架构图.png

NameServer的作用类似于zk,brocker启动之后会注册到nameserver上,并且每30秒发送一次心跳给nameserver也称服务续约,nameserver每隔10秒钟检查一次broker是否长时间没有发送心跳,默认超过120秒没有发送心跳broker会被nameserver剔除,producer和consumer通过NameServer获取Broker,每30秒拉取刷新一次Broker List,Broker集群节点分为master和slave节点

NameServer之间不通信,是如何保持Broker List一致的?

1、服务注册(Broker新增):Broker主动去每个nameserver续约,保证最终一致
2、服务剔除(Broker关闭或者宕机):每个nameserver主体去检查Broker是否长时间没有心跳,保证最终一致性
3、路由发现(客户端获取最新的Broker List,初始连接、后续连接):客户端(consumer和producer主动每隔30秒主动去拉取刷新Broker List)

消费模式

rocketMq既支持pull也支持push的方式,但push的方式也是通过pull的方式实现的

Message Queue(不同于其他mq的地方)

作用:实现消息的分片存储(存储在不同broker上)(类似于kafaka的partition),同时确定producer和consumer应该同那么broker进行通信。

Message对象

消费者消息消费失败返回:return ConsumeConcurrentlyStatus.RECONSUME_LETER,broker不更新消息偏移量offset
消费者消息消费成功返回:return ConsumeConcurrentlyStatus.RECONSUME_SUCCESS,broker更新消息偏移量offset

rokcetmq支持同步消息、异步消息、无序消息、有序消息、单向消息sendOneWay方式、单向顺序消息sendOneWayOrderly

同步:需要受到消息消费成功的ack,才发送下一条消息
异步:前一条消息未返回,依然发送下一条消息
oneway:单向发送消息,不关心消费情况,不会收的sendresult

RocketMq原理

rocketmq架构

borker内master节点和slave节点是怎么关联到一起的 ?

1、集群的名字相同,
2、连接到相同的nameserver
3、在配置文件中:brokerId=0代表master,borkerId=1代表是slave

主从同步和刷盘类型

brokerRole(broker的角色)
ASYNC_MASTER主从异步复制(有可能导致消息丢失)(只要master节点消息写入成功就给生产者返回ack,不需要等待slave收到消息)
SYNC_MASTER主从同步双写(推荐)(需要master和slave都收到消息才给生产者返回ack)
flushDiskType(刷盘类型)(对于单个节点)
ASYNC_FLUSH 异步刷盘,(默认)先缓存消息,缓存成功后直接给生产者返回(批量从缓存刷盘,提高了效率)
SYNC_FLUSH 同步刷盘,每一条消息都写入成功,才返回给生产者ack

故障转移(Dledger)

基于raft协议实现的自动选举功能,当master节点挂了,slave节点可以重新选举master节点

上一篇 下一篇

猜你喜欢

热点阅读