RocketMQ如何保證消息零丟失呢?
Producer消息零丟失的解決方案:
1、事務消息機制:使用事務消息能保證生產者一定會將消息寫入MQ,但是會降低吞吐量。
2、同步消息重試機制:發送同步消息,如果發生異常,則重試,如果重試超過一定次數仍然失敗,則可以先入庫,后續再補償。
Broker消息零丟失的解決方案:
1、同步刷盤:Broker的刷盤策略調整為同步刷盤,那么可以確保寫入MQ的消息一定是已經進入磁盤文件了,那么絕對不會因為機器宕機而丟失數據。
2、主從同步:采用主從架構的Broker集群,那么一條消息寫入成功,同時同步復制給其他Broker,此時任何一台機器的磁盤故障,數據也是不會丟失的。
以上兩步,就可以保證RocketMQ的服務集群消息零丟失。
Consumer消息零丟失的解決方案:
手動提交offset:只有正確處理了消息之后,才手動提交offset,通知Broker可以將消息刪除。
消息零丟失的方案看上去很完美,但是如果系統全鏈路采用了這套方案之后,會讓你整個從頭到尾的消息流轉鏈路的性能大幅度下降,讓你的MQ的吞吐量大幅度的下降。
所以,對於非核心的鏈路,其實沒有必要上這么重的解決方案,慎用。