RocketMQ核心配置講解
RocketMQ的核心配置在broker.conf配置文件里,下面我們來分析下它。
一、broker.conf配置
下面只列舉一些常用的核心配置講解。
1、broker.conf核心配置講解
# nameServer地址,如果nameserver是多台集群的話,就用分號分割
namesrvAddr=172.1.21.29:9876;143.13.262.43:9876
# 所屬集群名字(同一主從下:Master和slave名稱要一致)
brokerClusterName=rocketmq-cluster
# broker名字,注意此處不同的配置文件填寫的不一樣 例如:在a.properties 文件中寫 broker-a 在b.properties 文件中寫 broker-b
brokerName=broker-a
# 0 表示 Master,>0 表示 Slave
brokerId=0
# Broker 對外服務的監聽端口
listenPort=10911
# 在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數。由於是4個broker節點,所以設置為4
# defaultTopicQueueNums=4
# 是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
# 是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
# commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
# 檢測可用的磁盤空間大小,當磁盤被占用超過90%,消息寫入會直接報錯
diskMaxUsedSpaceRatio=90
# Broker 的角色: ASYNC_MASTER 異步復制Master ; SYNC_MASTER 同步雙寫Master; SLAVE
brokerRole=SYNC_MASTER
# 刷盤方式 ASYNC_FLUSH 異步刷盤; SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
2、同步刷盤 or 異步刷盤
同步刷盤和異步刷盤指的是 內存和磁盤 的關系。
RocketMQ的消息最終是是存儲到磁盤上的,這樣既能保證斷電后恢復,又可以讓存儲的消息量超出內存的限制。
從客戶端發送消息,一開始先寫到內存,再寫到磁盤上。如下圖所示
兩種策略
同步刷盤
:當數據成功寫到內存中之后立刻刷盤(同步),在保證消息寫到磁盤也成功的前提下返回寫成功狀態。
異步刷盤
:數據寫入內存后,直接返回成功狀態。異步將內存中的數據持久化到磁盤上。
同步刷盤和異步輸盤的優劣
同步刷盤
優點
:保證了數據的可靠性,保證數據不會丟失。
缺點
:同步刷盤效率較低,因為需要內存將消息寫入磁盤后才返回成功狀態。
異步刷盤
優點
:異步刷盤可以提高系統的吞吐量。因為它僅僅是寫入內存成功后,就返回成功狀態。
缺點
:異步刷盤不能保證數據的可靠性。因為寫入內存成功,但寫入磁盤的時候因為某種原因寫入失敗,那就會丟失該條消息。
3、同步復制 or 異步復制
同步復制和異步復制指的是 Master節點和slave節點 的關系。
如果一個Broker組有Master和Slave,消息需要從Master復制到Slave上
兩種策略
同步復制
: 當數據成功寫到內存中Master節點之后立刻同步到Slave中,當Slave也成功的前提下返回寫成功狀態。
異步復制
: 當數據成功寫到內存中Master節點之后,直接返回成功狀態,異步將Master數據存入Slave節點。
同步復制和異步復制的優劣:
同步復制
: 數據安全性高,性能低一點。
異步復制
: 數據可能丟失,性能高一點。
建議
線上采用 同步復制 + 異步刷盤;
只要自己變優秀了,其他的事情才會跟着好起來(上將1)