RocketMQ消息零丢失方案
RocketMQ如何保证消息零丢失呢?
Producer消息零丢失的解决方案:
1、事务消息机制:使用事务消息能保证生产者一定会将消息写入MQ,但是会降低吞吐量。
2、同步消息重试机制:发送同步消息,如果发生异常,则重试,如果重试超过一定次数仍然失败,则可以先入库,后续再补偿。
Broker消息零丢失的解决方案:
1、同步刷盘:Broker的刷盘策略调整为同步刷盘,那么可以确保写入MQ的消息一定是已经进入磁盘文件了,那么绝对不会因为机器宕机而丢失数据。
2、主从同步:采用主从架构的Broker集群,那么一条消息写入成功,同时同步复制给其他Broker,此时任何一台机器的磁盘故障,数据也是不会丢失的。
以上两步,就可以保证RocketMQ的服务集群消息零丢失。
Consumer消息零丢失的解决方案:
手动提交offset:只有正确处理了消息之后,才手动提交offset,通知Broker可以将消息删除。
消息零丢失的方案看上去很完美,但是如果系统全链路采用了这套方案之后,会让你整个从头到尾的消息流转链路的性能大幅度下降,让你的MQ的吞吐量大幅度的下降。
所以,对于非核心的链路,其实没有必要上这么重的解决方案,慎用。