消息存储

分布式队列因为高可靠性 所以要进行持久化的存贮
RocketMQ的高可用

存贮介质

mysql 在达到千万级别 IO进入瓶颈 文件系统直接 效率较高

消息的存储和发送

存储 使用了顺序写 发送利用了零拷贝技术 MappedByteBuffer
RocketMQ的高可用
三个文件夹
cmmitLog 存贮消息元数据
ConsumerQueue 消息的逻辑队列 存贮的是消息的物理的地址 每个Topic下的每个MessageQueue 都有一个ConsumerQueue文件
在consumerQueue 下的每个Topic下 有几个队列就有几个文件 会加载到内存来读取
index 提供了通过时间范围 和 key来查询消息

刷盘机制

RocketMQ的高可用

同步刷盘 写到文件里 再去响应成功 异步刷盘 写入内存 响应成功
RocketMQ的高可用

高可用机制

RocketMQ的高可用

消息消费高可用

消息发送高可用

在Consumer的配置文件中 不需要配置是从master或者slave消费 首先回去从master去读 如果繁忙 就去slave
切换时自动的

消息主从复制

同步复制 master到slave 复制成功 再去响应
异步复制 到master就响应

RocketMQ的高可用

从节点 直接slave 主节点 上面两个选项
RocketMQ的高可用

推荐 异步刷盘 保证吞吐量 同步复制 保证不丢失

负载均衡

RocketMQ的高可用

轮训的当时去发送 生产者的负载均衡
RocketMQ的高可用

集群模式 启动多个消费者

RocketMQ的高可用
AllocateMessageQueueAverageByCircle 环状轮询

消息重试

顺序重试

对于顺序消息 当消费者 消费消息失败后 消息队列会不断进行消息重试 后面的消费无法进行 会造成消息阻塞

无序重试

无序消息 当消费者消费失败 可以通过设置返回状态来达到消息重试的效果 无序消息只对集群消费有效 广播的话 只能消费一次

RocketMQ的高可用

不重试的写法
RocketMQ的高可用

死信队列

RocketMQ的高可用

消息幂等

相关文章: