RocketMQ高可用Q&A

1、rocketmq的主從切換機制

  • 當master所在機器正常運行的情況之下,producer往master中寫入消息,consumer從master中讀取並消費消息
  • 當master所在機器宕機之後,producer無法進行寫消息操作,consumer從該master的slaver機器中讀取並消費消息
  • 當master所在機器宕機之後,需要手動重啓master機器,重啓完之後,producer從nameserver獲取到了master信息,兩者重新進行連接操作(長連接),這個時候producer可以重新往master發送消息,consumer則自動從master讀取並消費消息

相關文檔資源鏈接:https://www.jianshu.com/p/08850de70ec0

2、rocketmq的主從複製策略

  • rocketmq的主從複製策略有兩種,分別是異步複製和同步複製:

ASYNC_MASTER:異步master,也就是新的消息存儲時不需要等slave同步好; 

SYNC_MASTER:同步master,新消息存現時需要等slave同步好(也就是返回的 Ack Offset >= 當前消息的CommitLog Offset;)

當異步複製時,如果master宕機,則有可能丟失一部分消息;同步複製情況下,不會丟失消息(刷盤同樣如此)

3、多master和多slaver的消息策略

多master情況下,producer通過nameserver的負載均衡策略輪詢的向每個master發送消息,實現rocketmq的高可用

4、rocketmq的文件刪除策略

由於RocketMQ操作CommitLog、ConsumeQueue文件,都是基於內存映射方法並在啓動的時候,會加載commitlog、ConsumeQueue目錄下的所有文件,爲了避免內存與磁盤的浪費,不可能將消息永久存儲在消息服務器上,所以需要一種機制來刪除已過期的文件。

RocketMQ順序寫Commitlog、ConsumeQueue文件,所有寫操作全部落在最後一個CommitLog或ConsumeQueue文件上,之前的文件在下一個文件創建後,將不會再被更新。

RocketMQ清除過期文件的方法是:如果非當前寫文件在一定時間間隔內沒有再次被更新,則認爲是過期文件,可以被刪除,RocketMQ不會管這個這個文件上的消息是否被全部消費。默認每個文件的過期時間爲72小時。通過在Broker配置文件中設置fileReservedTime來改變過期時間,單位爲小時。

相關配置內容:

fileReservedTime:文件保留時間,也就是從最後一次更新時間到現在,如果超過了該時間,則認爲是過期文件,可以被刪除。
deletePhysicFilesInterval:刪除物理文件的間隔,因爲在一次清除過程中,可能需要刪除的文件不止一個,該值指定兩次刪除文件的間隔時間。
destroyMapedFileIntervalForcibly:在清除過期文件時,如果該文件被其他線程所佔用(引用次數大於0,比如讀取消息),此時會阻止此次刪除任務,同時在第一次試圖刪除該文件時記錄當前時間戳,destroyMapedFileIntervalForcibly表示第一次拒絕刪除之後能保留的最大時間,在此時間內,同樣可以被拒絕刪除,同時會將引用減少1000個,超過該時間間隔後,文件將被強制刪除。

#刪除文件時間點,默認凌晨 4點 deleteWhen=04

#commitLog每個文件的大小默認1G 
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每個文件默認存30W條,根據業務情況調整

mapedFileSizeConsumeQueue=300000

RocketMQ 會每隔10s調度一次cleanFilesPeriodically,已檢測是否需要清除過期文件。執行頻率可以通過設置cleanResourceInterval,默認爲10s。

RocketMQ在如下三種情況任意滿足之一的情況下將繼續執行刪除文件操作。

到了刪除文件的時間點,RocketMQ通過deleteWhen設置一天的固定時間執行一次刪除過期文件操作,默認爲凌晨4點。
判斷磁盤空間是否充足,如果不充足,則返回true,表示應該觸發過期文件刪除操作。
預留,手工觸發,可以通過調用excuteDeleteFilesManualy方法手工觸發過期文件刪除,目前RocketMQ暫未封裝手工觸發文件刪除的命令。

相關鏈接:https://blog.csdn.net/prestigeding/article/details/79482339

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