RocketMQ(二) 集羣配置

相關概念

NameServer

這裏我們可以理解成類似於zk的一個註冊中心,而且rocketmq最初也是基於zk作爲註冊中心的,現在相當於爲rocketmq自定義了一個註冊中心,代碼不超過1000行。RocketMQ 有多種配置方式可以令客戶端找到 Name Server, 然後通過 Name Server 再找到 Broker,分別如下,優先級由高到低,高優先級會覆蓋低優先級。客戶端提供http和ip:端口號的兩種方式,推薦使用http的方式可以實現nameserver的熱部署。

Push Consumer

Consumer 的一種,應用通常通過 Consumer 對象註冊一個 Listener 接口,一旦收到消息,Consumer 對象立刻回調 Listener 接口方法,類似於activemq的方式

Pull Consume

Consumer 的一種,應用通常主動調用 Consumer 的拉消息方法從 Broker 拉消息,主動權由應用控制

Producer Group

一類producer的集合名稱,這類producer通常發送一類消息,且發送邏輯一致

Consumer Group

同上,consumer的集合名稱

Broker

消息中轉的角色,負責存儲消息(實際的存儲是調用的store組件完成的),轉發消息,一般也成爲server,同jms中的provider

Message Filter

可以實現高級的自定義的消息過濾

Master/Slave

集羣的主從關係,broker的name相同,brokerid=0的爲主master,大於0的爲從slave,可以一主多從,但一從只能有一主

RocketMQ角色介紹

RocketMQ由四部分構成:Producer、Consumer、Broker和NameServer

啓動順序:NameServer->Broker

rocketmq架構圖

在這裏插入圖片描述

RocketMQ的使用

下載

RocketMQ的下載地址http://rocketmq.apache.org/release_notes/release-notes-4.4.0/

配置環境變量

在這裏插入圖片描述
在這裏插入圖片描述

集羣部署方式

單Master模式

優點:配置簡單,方便部署

缺點:這種方式風險較大,一旦Broker重啓或者宕機時,會導致整個服務不可用,不建議線上環境使用

多Master模式

優點: 配置簡單,一個Master宕機重啓不會有什麼影響

缺點: 單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復之前不可訂閱

多Master多Slave模式(異步複製)

一個Master配置一個Slave,有多對Master-Slave,採用的異步的方式
,可以一主多從,但一從只能有一主

優點: 即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因爲Master 宕機後,消費者仍然可以從 Slave消費,此過程對應用透明。不需要人工干預。性能同多 Master 模式幾乎一樣。

缺點: Master 宕機,磁盤損壞情況,會丟失少量消息。

多Master多Slave模式(同步雙寫)

同多 master 多 slave 異步複製模式類似,區別在於 master 和 slave 之間的數據同步方式。

優點:同步雙寫的同步模式能保證數據不丟失。
缺點:發送單個消息 RT 會略長,性能相比異步複製低10%左右。
刷盤策略:同步刷盤和異步刷盤(指的是節點自身數據是同步還是異步存儲)
同步方式:同步雙寫和異步複製(指的一組 master 和 slave 之間數據的同步)

在這裏插入圖片描述

開始搭建

修改broker-a.properties內容

	#所屬集羣名字
    brokerClusterName=rocketmq-cluster
    #broker名字,名字可重複,爲了管理,每個master起一個名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
    brokerName=broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId=0
    #nameServer地址,分號分割
    namesrvAddr=localhost:9876;localhost:9877
    #在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
    defaultTopicQueueNums=4
    #是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
    autoCreateTopicEnable=true
    #是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
    autoCreateSubscriptionGroup=true
    #Broker 對外服務的監聽端口,
    listenPort=10910
    #刪除文件時間點,默認凌晨 4點
    deleteWhen=04
    #文件保留時間,默認 48 小時
    fileReservedTime=120
    #commitLog每個文件的大小默認1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每個文件默認存30W條,根據業務情況調整
    mapedFileSizeConsumeQueue=300000
    #destroyMapedFileIntervalForcibly=120000
    #redeleteHangedFileInterval=120000
    #檢測物理文件磁盤空間
    diskMaxUsedSpaceRatio=88
    #存儲路徑
    storePathRootDir=C:\Users\Tang\Desktop\path\broker-a\RootDir
    #commitLog 存儲路徑
    storePathCommitLog=C:\Users\Tang\Desktop\path\broker-a\CommitLog
    #消費隊列存儲路徑存儲路徑
    storePathConsumeQueue=C:\Users\Tang\Desktop\path\broker-a\ConsumeQueue
    #消息索引存儲路徑
    storePathIndex=C:\Users\Tang\Desktop\path\broker-a\Index
    #checkpoint 文件存儲路徑
    storeCheckpoint=C:\Users\Tang\Desktop\path\broker-a\point
    #abort 文件存儲路徑
    abortFile=C:\Users\Tang\Desktop\path\broker-a\File
    #限制的消息大小
    maxMessageSize=65536
    #flushCommitLogLeastPages=4
    #flushConsumeQueueLeastPages=2
    #flushCommitLogThoroughInterval=10000
    #flushConsumeQueueThoroughInterval=60000
    #Broker 的角色
    #- ASYNC_MASTER 異步複製Master
    #- SYNC_MASTER 同步雙寫Master
    #- SLAVE
    brokerRole=ASYNC_MASTER
    #刷盤方式
    #- ASYNC_FLUSH 異步刷盤
    #- SYNC_FLUSH 同步刷盤
    flushDiskType=ASYNC_FLUSH
    #checkTransactionMessageEnable=false
    #發消息線程池數量
    #sendMessageThreadPoolNums=128
    #拉消息線程池數量
    #pullMessageThreadPoolNums=128

修改broker-a-b.properties內容

#所屬集羣名字
    brokerClusterName=rocketmq-cluster
    #broker名字,名字可重複,爲了管理,每個master起一個名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
    brokerName=broker-a
    #0 表示 Master,>0 表示 Slave
    brokerId=1
    #nameServer地址,分號分割
    namesrvAddr=localhost:9876;localhost:9877
    #在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
    defaultTopicQueueNums=4
    #是否允許 Broker 自動創建Topic,建議線下開啓,線上關閉
    autoCreateTopicEnable=true
    #是否允許 Broker 自動創建訂閱組,建議線下開啓,線上關閉
    autoCreateSubscriptionGroup=true
    #Broker 對外服務的監聽端口,
    listenPort=10920
    #刪除文件時間點,默認凌晨 4點
    deleteWhen=04
    #文件保留時間,默認 48 小時
    fileReservedTime=120
    #commitLog每個文件的大小默認1G
    mapedFileSizeCommitLog=1073741824
    #ConsumeQueue每個文件默認存30W條,根據業務情況調整
    mapedFileSizeConsumeQueue=300000
    #destroyMapedFileIntervalForcibly=120000
    #redeleteHangedFileInterval=120000
    #檢測物理文件磁盤空間
    diskMaxUsedSpaceRatio=88
    #存儲路徑
    storePathRootDir=C:\Users\Tang\Desktop\path\broker-a-s\RootDir
    #commitLog 存儲路徑
    storePathCommitLog=C:\Users\Tang\Desktop\path\broker-a-s\CommitLog
    #消費隊列存儲路徑存儲路徑
    storePathConsumeQueue=C:\Users\Tang\Desktop\path\broker-a-s\ConsumeQueue
    #消息索引存儲路徑
    storePathIndex=C:\Users\Tang\Desktop\path\broker-a-s\Index
    #checkpoint 文件存儲路徑
    storeCheckpoint=C:\Users\Tang\Desktop\path\broker-a-s\point
    #abort 文件存儲路徑
    abortFile=C:\Users\Tang\Desktop\path\broker-a-s\File
    #限制的消息大小
    maxMessageSize=65536
    #flushCommitLogLeastPages=4
    #flushConsumeQueueLeastPages=2
    #flushCommitLogThoroughInterval=10000
    #flushConsumeQueueThoroughInterval=60000
    #Broker 的角色
    #- ASYNC_MASTER 異步複製Master
    #- SYNC_MASTER 同步雙寫Master
    #- SLAVE
    brokerRole=SLAVE
    #刷盤方式
    #- ASYNC_FLUSH 異步刷盤
    #- SYNC_FLUSH 同步刷盤
    flushDiskType=ASYNC_FLUSH
    #checkTransactionMessageEnable=false
    #發消息線程池數量
    #sendMessageThreadPoolNums=128
    #拉消息線程池數量
    #pullMessageThreadPoolNums=128

broker-b 與 broker-a的配置基本相同

修改配置文件

rocketmq默認自帶了三種建議的配置

rocketmq-all-4.4.0-bin-release\conf 下我們可以看到

  • 2m-2s-async (2主2從異步)
  • 2m-2s-sync (2主2從同步)
  • 2m-noslave (2主)

我們這裏搭建2主2從的模式,企業爲了保證數據的不丟失使用的是2主2從 同步

注意事項

  1. autoCreateTopicEnable=true,建議線下開啓測試,線上關閉
  2. listenPort默認爲10911,當一個機器上啓動多個broker示例時,需區分開端口
  3. brokerClusterName 配置集羣名字必須相同
  4. namesrvAddr 配置的時候 有多少個nameSev就寫多少個,用";"號隔開.
  5. broker啓動時,默認內存設置比較大,改成適合機器的,細節看下面
  6. 當一個節點啓動多個broker實例時,存儲路徑如果顯示的設置,則需要指定不同的storePath路徑,(不設置的話,默認不同)
  7. brokerName 設置的時候 主broker需要和從broker相同
  8. brokerId 設置的時候 主設置爲0 ,從設置爲1,2,3…(有多少從設置多少)

需求內存太大

默認大小

-Xms8g -Xmx8g -Xmn4g

改爲:

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

該配置視環境情況而定,配置一定要在環境內存允許的情況下,否則啓動會報錯,本地虛擬機配置很多問題都出在這一步

啓動mqnamesrv.cmd(這裏是有一臺主機上)

啓動第一個mqnamesrv 我們可以使用默認的端口地址:9876

啓動第二個mqnamesrv 我們需要創建mqnamesrv的配置文件(namesrv.properties)

在這裏插入圖片描述

啓動命令

格式: mqnamesrv -c 配置文件

例如:

F:\rocketmq-all-4.4.0-bin-release\bin\mqnamesrv -c F:\rocketmq-all-4.4.0-bin-release\conf\namesrv.properties

啓動broker(2主2從)

在這裏插入圖片描述
在這裏插入圖片描述

啓動命令

格式: mqbroker -c 配置文件

例如

F:\rocketmq-all-4.4.0-bin-release\bin\mqbroker -c F:\rocketmq-all-4.4.0-bin-release\conf\2m-2s-async\broker-a.properties

啓動結果

在這裏插入圖片描述

成功開啓

可視化界面查看效果

下載地址:https://github.com/apache/rocketmq-externals

進入到 rocketmq-console

文件夾下,執行如下命令:

mvn clean package -Dmaven.test.skip=true

執行完之後啓動

java -jar target/rocketmq-console-ng-1.0.1.jar --server.port=8888 --rocketmq.config.namesrvAddr=localhost:9876;localhost:9877

在這裏插入圖片描述

或者修改application.properties文件

在這裏插入圖片描述
在這裏插入圖片描述

啓動

java -jar target/rocketmq-console-ng-1.0.1.jar

測試

成功了(累死了)

在這裏插入圖片描述

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