其他分享
首页 > 其他分享> > RocketMQ 原理:消息存储、高可用、消息重试、消息幂等性

RocketMQ 原理:消息存储、高可用、消息重试、消息幂等性

作者:互联网

目录


消息存储

消息存储方式

非持久化

image

  1. 消息生成者发送消息到 MQ

  2. MQ 返回 ACK(Acknowledge Character)给生产者

  3. MQ push 消息给对应的消费者

  4. 消息消费者返回 ACK 给 MQ


持久化

image

  1. 消息生成者发送消息到 MQ

  2. MQ 收到消息,将消息进行持久化,存储该消息

  3. MQ 返回 ACK 给生产者

  4. MQ push 消息给对应的消费者

  5. 消息消费者返回 ACK 给 MQ

  6. MQ 删除消息

注意:

①第 5 步 MQ 在指定时间内接到消息消费者返回 ACK,MQ 认定消息消费成功,执行 6 。

②第 5 步 MQ 在指定时间内未接到消息消费者返回 ACK,MQ 认定消息消费失败,重新执行 4、5、6 。


消息存储介质

image

数据库

文件系统


消息存储与读写方式

SSD(Solid State Disk):固态硬盘


Linux 系统发送数据的方式

image


消息存储结构

image

如图所示,MQ 数据存储区域包含如下内容:


刷盘机制

同步刷盘

image

  1. 生产者发送消息到 MQ,MQ 接到消息数据

  2. MQ 挂起生产者发送消息的线程

  3. MQ 将消息数据写入内存

  4. 内存数据写入硬盘

  5. 磁盘存储后返回 SUCCESS

  6. MQ 恢复挂起的生产者线程

  7. 发送 ACK 到生产者


异步刷盘

image

  1. 生产者发送消息到 MQ,MQ 接到消息数据

  2. MQ 将消息数据写入内存

  3. 发送 ACK 到生产者


小结

# 刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH

高可用

高可用实现

nameserver

消息服务器

消息生产

消息消费


主从复制

同步复制

异步复制

配置方式

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER

负载均衡

Producer 负载均衡:

Consumer 两种负载均衡策略


消息重试

当消息消费后未正常返回消费成功的信息将启动消息重试机制

两种消息重试机制:


顺序消息重试

image


无序消息重试

image


死信队列

概念

死信队列的特征

死信队列中的消息的特征

死信处理


消息幂等

消息重复消费

消息重复消费原因

image


消息幂等

对同一条消息,无论消费多少次,结果保持一致,称为消息幂等性

解决方案

  1. 使用业务 id 作为消息的 key 。

  2. 在消费消息时,客户端对 key 做判定,未使用过放行,使用过抛弃。

常见的幂等方法示例

标签:队列,重试,死信,MQ,消息,RocketMQ,刷盘
来源: https://www.cnblogs.com/juno3550/p/15816133.html