RocketMQ高可用機制----同步刷盤、異步刷盤和同步複製、異步複製

 

 

 

RocketMQ高可用機制----同步刷盤、異步刷盤和同步複製、異步複製

 

 

同步刷盤、異步刷盤

  RocketMQ的消息是存儲到磁盤上的,這樣既能保證斷電後恢復,又可以讓存儲的消息量超出內存的限制。

RocketMQ爲了提高性能,會儘可能地保證磁盤的順序寫。消息在通過Producer寫入RocketMQ的時候,有兩種

寫磁盤方式:

  1)異步刷盤方式:在返回寫成功狀態時,消息可能只是被寫入了內存的PAGECACHE,寫操作的返回快,吞吐量大;當內存裏的消息量積累到一定程度時,統一觸發寫磁盤操作,快速寫入 

           優點:性能高

           缺點:Master宕機,磁盤損壞的情況下,會丟失少量的消息, 導致MQ的消息狀態和生產者/消費者的消息狀態不一致

  2)同步刷盤方式:在返回應用寫成功狀態前,消息已經被寫入磁盤。具體流程是,消息寫入內存的PAGECACHE後,立刻通知刷盤線程刷盤,然後等待刷盤完成,刷盤線程執行完成後喚醒等待的線程,給應用返回消息寫成功的狀態。

          優點:可以保持MQ的消息狀態和生產者/消費者的消息狀態一致

          缺點:性能比異步的低

 

          同步刷盤還是異步刷盤,是通過Broker配置文件裏的flushDiskType參數設置的,這個參數被設置成SYNC_FLUSH, ASYNC_FLUSH中的一個

 

 

 

同步複製、異步複製

  如果一個broker組有Master和Slave,消息需要從Master複製到Slave上,有同步和異步兩種複製方式。

       1)同步複製方式:等Master和Slave均寫成功後才反饋給客戶端寫成功狀態

            優點:如果Master出故障,Slave上有全部的備份數據,容易恢復,消費者仍可以從Slave消費, 消息不丟失

            缺點:增大數據寫入延遲,降低系統吞吐量,性能比異步複製模式略低,大約低10%左右,發送單個Master的響應時間會略高

       2)異步複製方式:只要Master寫成功即可反饋給客戶端寫成功狀態

            優點:系統擁有較低的延遲和較高的吞吐量. Master宕機之後,消費者仍可以從Slave消費,此過程對應用透明,不需要人工干預,性能同多個Master模式幾乎一樣

            缺點:如果Master出了故障,有些數據因爲沒有被寫入Slave,而丟失少量消息。

 

 

      同步複製和異步複製是通過Broker配置文件裏的brokerRole參數進行設置的,這個參數可以被設置成ASYNC_MASTER、SYNC_MASTER、SLAVE三個值中的一個。

 

 

總結

       消息零丟失是一把雙刃劍,要想用好,還是要視具體的業務場景,在性能和消息零丟失上做平衡

  實際應用中,推薦把Master和Slave設置成ASYNC_FLUSH的異步刷盤方式,主從之間配置成SYNC_MASTER的同步複製方式,這樣即使有一臺機器出故障,仍然可以保證數據不丟。

 

 

 

rocketmq 同步刷盤、異步刷盤和同步複製、異步複製 - 持續在更新 - 博客園
https://www.cnblogs.com/toUpdating/p/10021372.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章