RocketMq-如何保证消息不丢失

67 阅读1分钟

一、消费可能丢失的环节

  1. 生产者给Broker发消息。
  2. Broker集群主从同步过程中。
  3. 消费存入内存中,还为存入磁盘时宕机或断电。
  4. 消费者从Broker中取消息。

一、生产者

  1. 同步阻塞的方式发送消息,加上失败重试机制,可能Broker存储失败,可以通过查询确认。
  2. 异步发送需要重新回调方法,检查发送结果。
  3. ACK机制,可能存储CommitLog成功,但是存储ConsumeQueue失败,此时对消费者不可见。
  4. 事务消息。

二、Broker集群主从同步

  1. 同步同步:普通集群模式下采用同步复制,master会等待slave复制完成才会返回确认。这种方式效率低,但是保证消息不会丢失。
  2. 异步同步:消息在master存盘之后就告诉生产者结果。这种方式性能高,但是都消息丢失的风险。
  3. Dledger集群:二阶段提交。

三、刷盘策略

  1. 异步刷盘:效率高,但有可能丢失消息
  2. 同步刷盘:效率低,但是安全性更高。

四、消费端

使用默认方式,不要采用异步方式。