一、消费可能丢失的环节
- 生产者给Broker发消息。
- Broker集群主从同步过程中。
- 消费存入内存中,还为存入磁盘时宕机或断电。
- 消费者从Broker中取消息。
一、生产者
- 同步阻塞的方式发送消息,加上失败重试机制,可能Broker存储失败,可以通过查询确认。
- 异步发送需要重新回调方法,检查发送结果。
- ACK机制,可能存储CommitLog成功,但是存储ConsumeQueue失败,此时对消费者不可见。
- 事务消息。
二、Broker集群主从同步
- 同步同步:普通集群模式下采用同步复制,master会等待slave复制完成才会返回确认。这种方式效率低,但是保证消息不会丢失。
- 异步同步:消息在master存盘之后就告诉生产者结果。这种方式性能高,但是都消息丢失的风险。
- Dledger集群:二阶段提交。
三、刷盘策略
- 异步刷盘:效率高,但有可能丢失消息
- 同步刷盘:效率低,但是安全性更高。
四、消费端
使用默认方式,不要采用异步方式。