写点什么

2023-07-12:RocketMQ 如何做到消息不丢失?

  • 2023-07-12
    北京
  • 本文字数:621 字

    阅读完需:约 2 分钟

2023-07-12:RocketMQ 如何做到消息不丢失?


答案 2023-07-12:


RocketMQ 通过刷盘机制、消息拉取机制和 ACK 机制等多种方式来确保消息投递的可靠性,防止消息丢失。


1.刷盘机制


RocketMQ 中的消息分为内存消息和磁盘消息,内存消息在 Broker 内存中进行读写,磁盘消息则保存在磁盘上。RocketMQ 支持同步刷盘和异步刷盘两种方式,通过刷盘机制可以确保消息在 Broker 宕机时不会丢失。在同步刷盘模式下,消息写入磁盘时,会等待磁盘的写入完成才返回写入成功的响应。在异步刷盘模式下,消息写入磁盘后立即返回写入成功的响应,但不等待磁盘写入完成。


2.ACK 机制


在 RocketMQ 中,Producer 发送消息后,Broker 会返回 ACK 确认信号,表示消息已成功发送。如果 Broker 未收到 ACK 确认信号,则会尝试重新发送消息,直到收到确认。


RocketMQ 采用主从复制机制,每个消息队列都有一个主节点和多个从节点。主节点负责消息的写入和读取,从节点负责备份数据。当主节点宕机时,从节点会自动接管主节点的工作,确保消息不会丢失。


3.消息存储机制


RocketMQ 默认采用双写模式存储消息,即将消息同时写入内存和磁盘,然后异步将内存中的消息刷盘到磁盘中。这种方式确保了消息的可靠性,即使系统宕机,也尽可能地避免消息丢失。


此外,RocketMQ 还提供了多种机制来保证消息不丢失,例如事务消息、延迟消息、顺序消息等,可以根据业务需求选择和使用。


值得注意的是,为了保证消息的可靠性,RocketMQ 发送消息的速度可能受到一定的限制,需要在消息可靠性和性能之间做出权衡。



发布于: 刚刚阅读数: 3
用户头像

公众号:福大大架构师每日一题 2021-02-15 加入

公众号:福大大架构师每日一题

评论

发布
暂无评论
2023-07-12:RocketMQ如何做到消息不丢失?_福大大架构师每日一题_福大大架构师每日一题_InfoQ写作社区