文章目錄
- 1. 集群
- 1.1 集群特征
- 1.2 集群的作業流程
- 1.3 搭建
- 2. rocketmq-console
- 3 高級特性介紹
- 3.1 訊息的存盤(訊息存在哪兒?)
- 3.2 MQ 高效的訊息存盤與讀寫方式
- 3.4 刷盤機制
- 3.4.1 同步刷盤
- 3.4.2 異步刷盤
- 3.4.3 同步刷盤/ 異步刷盤 優缺點對比
- 3.4.4 配置方式
- 4. 高可用性
- 5. 主從資料復制
- 5.1 同步復制
- 5.2 異步復制
- 5.3 配置(配置在啟動時 -c 指定的組態檔中 broker.conf)
- 6 負載均衡
- 7. 訊息重試
- 7.1 順序訊息重試
- 7.2 無序訊息重試
- 8. 死信佇列
- 8.1 概念
- 8.2 死信佇列特征
- 8.3 死信佇列中訊息特征
- 8.4 死信處理
- 9. 訊息重復消費與 訊息冪等
- 9.1 訊息重復消費原因
- 9.2 訊息冪等
- 9.2.1 解決方案
- RocketMQ的安裝配置
- 一,配置JDK環境
- 二,配置RocketMQ環境
- 三,配置集群環境
- 四,配置rocketmq-console
1. 集群
-
多個broker提供服務
-
多個master多個slave
? master到slave訊息同步方式為同步(較異步方式性能略低,訊息無延遲)
? master到slave訊息同步方式為異步(較同步方式性能略高,資料略有延遲)
1.1 集群特征
NameServer是一個幾乎無狀態節點,可集群部署,節點之間無任何資訊同步,
Broker部署相對復雜,Broker分為Master與Slave,一個Master可以對應多個Slave,但是一個Slave只能對應一個Master,Master與Slave的對應關系通過指定相同的BrokerName,不同的BrokerId來定義,BrokerId為0表示Master,非0表示Slave,Master也可以部署多個,每個Broker與NameServer集群中的所有節點建立長連接,定時注冊Topic資訊到所有NameServer,
Producer與NameServer集群中的其中一個節點(隨機選擇)建立長連接,定期從NameServer取Topic路由資訊,并向提供Topic服務的Master建立長連接,且定時向Master發送心跳,Producer完全無狀態,可集群部署,
Consumer與NameServer集群中的其中一個節點(隨機選擇)建立長連接,定期從NameServer取Topic路由資訊,并向提供Topic服務的Master、Slave建立長連接,且定時向Master、Slave發送心跳,Consumer既可以從Master訂閱訊息,也可以從Slave訂閱訊息,訂閱規則由Broker配置決定,
總結:
1) nameserver有 多個
2) master 多個,每個master 都有多個 slave
3) master 的 brokerid =0 , slave 的 brokerid 非0
4) 多個 master 和多個slave 如果 brokername 相同則 為一組
5) master 和slave 會將自己注冊到每一臺 nameserver 上

1.2 集群的作業流程
步驟1:NameServer啟動,開啟監聽,等待broker、producer與consumer連接
步驟2:broker啟動,根據配置資訊,連接所有的NameServer,并保持長連接
步驟2補充:如果broker中有現存資料, NameServer將保存topic與broker關系
步驟3:producer發資訊,連接某個NameServer,并建立長連接
步驟4:producer發訊息
步驟4.1若果topic存在,由NameServer直接分配
步驟4.2如果topic不存在,由NameServer創建topic與broker關系,并分配
步驟5:producer在broker的topic選擇一個訊息佇列(從串列中選擇)
步驟6:producer與broker建立長連接,用于發送訊息
步驟7:producer發送訊息
comsumer作業流程同producer
1.3 搭建
1) 配置主機名稱(未來就可以根據主機名找到對應的服務器了)
vim /etc/hosts
# nameserver
192.168.184.128 rocketmq-nameserver1
192.168.184.129 rocketmq-nameserver2
# broker
192.168.184.128 rocketmq-master1
192.168.184.129 rocketmq-slave2
192.168.184.129 rocketmq-master2
192.168.184.128 rocketmq-slave1
配置完畢后重啟網卡,應用配置
systemctl restart network
2) 關閉防火墻
# 關閉防火墻
systemctl stop firewalld.service
# 查看防火墻的狀態
firewall-cmd --state
# 禁止firewall開機啟動
systemctl disable firewalld.service
3) 配置jdk
詳見JAVA —— RocketMQ ①
4) 配置服務器環境
將rocketmq 解壓至跟目錄 /
# 解壓
unzip rocketmq-all-4.5.2-bin-release.zip
# 修改目錄名稱
mv rocketmq-all-4.5.2-bin-release rocketmq
vim /etc/profile
#set rocketmq
ROCKETMQ_HOME=/rocketmq
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
配置完畢后重啟網卡,應用配置
source /etc/profile
5) 創建集群服務器的資料存盤目錄
主節點創建四個目錄/ 從節點四個目錄
mkdir /rocketmq/store
mkdir /rocketmq/store/commitlog
mkdir /rocketmq/store/consumequeue
mkdir /rocketmq/store/index
mkdir /rocketmq-slave/store
mkdir /rocketmq-slave/store/commitlog
mkdir /rocketmq-slave/store/consumequeue
mkdir /rocketmq-slave/store/index
注意master與slave如果在同一個虛擬機中部署,需要將存盤目錄區分開
6) 修改配置
(不同的節點,應該修改不同的配置,檔案夾也應該不一樣
>cd r/ocketmq/conf/2m-2s-sync
>vim broker-a.proerties
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的組態檔填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發送訊息時,自動創建服務器不存在的topic,默認創建的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=11011
#洗掉檔案時間點,默認凌晨 4點
deleteWhen=04
#檔案保留時間,默認 48 小時
fileReservedTime=48
#commitLog每個檔案的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁盤空間
diskMaxUsedSpaceRatio=88
#存盤路徑
storePathRootDir=/rocketmq/store-slave
#commitLog 存盤路徑
storePathCommitLog=/rocketmq/store-slave/commitlog
#消費佇列存盤路徑存盤路徑
storePathConsumeQueue=/rocketmq/store-slave/consumequeue
#訊息索引存盤路徑
storePathIndex=/rocketmq/store-slave/index
#checkpoint 檔案存盤路徑
storeCheckpoint=/rocketmq/store-slave/checkpoint
#abort 檔案存盤路徑
abortFile=/rocketmq
#限制的訊息大小
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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128
檢查啟動記憶體 (nameserver 和broker 均需要修改)
vim /rocketmq/bin/runbroker.sh
vim /rocketmq/bin/runserver.sh
# 開發環境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
啟動(bin 目錄)
nohup sh mqnamesrv &
nohup sh mqbroker -c ../conf/2m-2s-syncbroker-a.properties &
nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties &
2. rocketmq-console
rocketmq-console是一款基于java環境開發的(springboot)的管理控制臺工具
獲取地址:https://github.com/apache/rocketmq-externals
3 高級特性介紹
3.1 訊息的存盤(訊息存在哪兒?)
ActiveMQ 使用了資料庫的訊息存盤,
缺點:資料庫瓶頸將成為MQ瓶頸

RocketMQ/Kafka/RabbitMQ
不用資料庫,直接用檔案存盤(如下)

3.2 MQ 高效的訊息存盤與讀寫方式
1) 通過啟動時初始化話檔案大小來保證 占用固定的磁盤空間,保證磁盤讀寫速度
2) 零拷貝”技術
資料傳輸由傳統的4次復制簡化成3次復制(如下圖),減少1次復制程序
Java語言中使用MappedByteBuffer類實作了該技術
要求:預留存盤空間,用于保存資料(1G存盤空間起步)

3.3 訊息存盤結構
訊息資料存盤區域
topic
queueId
message
消費邏輯佇列
minOffset
maxOffset
consumerOffset
索引
key索引
創建時間索引
……

3.4 刷盤機制
3.4.1 同步刷盤
1)生產者發送訊息到MQ,MQ接到訊息資料
2)MQ掛起生產者發送訊息的執行緒
3)MQ將訊息資料寫入記憶體
4)記憶體資料寫入硬碟
5)磁盤存盤后回傳SUCCESS
6)MQ恢復掛起的生產者執行緒
7)發送ACK到生產者

3.4.2 異步刷盤
1)生產者發送訊息到MQ,MQ接到訊息資料
2)MQ將訊息資料寫入記憶體
3)發送ACK到生產者
--等訊息量多了--
4)記憶體資料寫入硬碟

3.4.3 同步刷盤/ 異步刷盤 優缺點對比
同步刷盤:安全性高,效率低,速度慢(適用于對資料安全要求較高的業務)
異步刷盤:安全性低,效率高,速度快(適用于對資料處理速度要求較高的業務)
3.4.4 配置方式
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
4. 高可用性
nameserver
nameserver ,通過無狀態+全服務器注冊 來保證即使一個宕機了也能提供所有的服務
訊息服務器
主從架構(2M-2S) ,即使又一臺服務器宕機, 服務依舊可以正常提供
注意: master 一旦宕機,slave 只提供消費服務,不能寫入新的訊息(slave 不會升級為master)
訊息生產(開發人員寫代碼時保障)
生產者將相同的topic系結到多個group組,保障master掛掉后,其他master仍可正常進行訊息接收
訊息消費
RocketMQ自身會根據master的壓力確認是否由master承擔訊息讀取的功能,當master繁忙時候,自動切換由slave承擔資料讀取的作業
5. 主從資料復制
5.1 同步復制
master接到訊息后,先復制到slave,然后反饋給生產者寫操作成功
優點:資料安全,不丟資料,出現故障容易恢復
缺點:影響資料吞吐量,整體性能低
5.2 異步復制
master接到訊息后,立即回傳給生產者寫操作成功,當訊息達到一定量后再異步復制到slave
優點:資料吞吐量大,操作延遲低,性能高
缺點:資料不安全,會出現資料丟失的現象,一旦master出現故障,從上次資料同步到故障時間的資料將丟失
5.3 配置(配置在啟動時 -c 指定的組態檔中 broker.conf)
#Broker 的角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
6 負載均衡
-
Producer負載均衡
內部實作了不同broker集群中對同一topic對應訊息佇列的負載均衡
-
Consumer負載均衡
平均分配
回圈平均分配
7. 訊息重試
當訊息消費后未正常回傳消費成功的資訊將啟動訊息重試機制
7.1 順序訊息重試
當消費者消費訊息失敗后,RocketMQ會自動進行訊息重試(每次間隔時間為 1 秒)
注意:應用會出現訊息消費被阻塞的情況,因此,要對順序訊息的消費情況進行監控,避免阻塞現象的發生
7.2 無序訊息重試
無序訊息包括普通訊息、定時訊息、延時訊息、事務訊息
無序訊息重試僅適用于負載均衡(集群)模型下的訊息消費,不適用于廣播模式下的訊息消費
為保障無序訊息的消費,MQ設定了合理的訊息重試間隔時長

8. 死信佇列
8.1 概念
當訊息消費重試到達了指定次數(默認16次)后,MQ將無法被正常消費的訊息稱為死信訊息(Dead-Letter Message)
死信訊息不會被直接拋棄,而是保存到了一個全新的佇列中,該佇列稱為死信佇列(Dead-Letter Queue)
8.2 死信佇列特征
- 歸屬某一個組(Gourp Id),而不歸屬Topic,也不歸屬消費者
- 一個死信佇列中可以包含同一個組下的多個Topic中的死信訊息
- 死信佇列不會進行默認初始化,當第一個死信出現后,此佇列首次初始化
8.3 死信佇列中訊息特征
- 不會被再次重復消費
- 死信佇列中的訊息有效期為3天,達到時限后將被清除
8.4 死信處理
在監控平臺中,通過查找死信,獲取死信的messageId,然后通過id對死信進行精準消費
9. 訊息重復消費與 訊息冪等
9.1 訊息重復消費原因
1 生產者發送了重復的訊息
網路閃斷
生產者宕機
2 訊息服務器投遞了重復的訊息
網路閃斷
3 動態的負載均衡程序
網路閃斷/抖動
broker重啟
訂閱方應用重啟(消費者)
客戶端擴容
客戶端縮容
9.2 訊息冪等
對同一條訊息,無論消費多少次,結果保持一致,稱為訊息冪等性
9.2.1 解決方案
- 使用業務id作為訊息的key
- 在消費訊息時,客戶端對key做判定,未使用過放行,使用過拋棄
注意:messageId由RocketMQ產生,messageId并不具有唯一性,不能作用冪等判定條件
RocketMQ的安裝配置
演示虛擬機環境:Centos64-1 (D:\linuxMore\centos6_64)
root / xxx: 固定IP 192.168.52.128
一,配置JDK環境
1,解壓jdk到指定的目錄
tar -xvf jdk-8u171-linux-x64.tar.gz -C /usr/local
cd /usr/local
mv jdk1.8.0_171 jdk1.8
2,配置環境變數
- vi /etc/profile
- 在末尾行添加
#set java environment
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$PATH:${JAVA_HOME}/bin
- source /etc/profile 使用剛才的配置生效,如果不起作用,重啟服務器 reboot
二,配置RocketMQ環境
上傳 檔案到/usr/local/src下
解壓:
unzip rocketmq-all-4.5.2-bin-release.zip -C /opt
cd /opt
mv rocketmq-all-4.5.2-bin-release rocketmq
啟動nameserver
./mqnamesrv
[root@localhost bin]# ./mqnamesrv
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
啟動broker
./mqbroker -n 192.168.52.128:9876
[root@localhost bin]# ./mqbroker
The broker[localhost.localdomain, 192.168.52.128:10911] boot success. serializeType=JSON
如果broker啟動報錯:修改 runbroker.sh檔案中的記憶體引數即可
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
如果和docker 一起 需要修改組態檔:
conf/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUS
# 解決和docker 沖突的
brokerIP1=192.168.52.128
namesrvAddr=192.168.52.128:9876
三,配置集群環境
1) 配置主機名稱(未來就可以根據主機名找到對應的服務器了)
vim /etc/hosts
# nameserver
192.168.52.128 rocketmq-nameserver1
192.168.52.128 rocketmq-nameserver2
# broker
192.168.52.128 rocketmq-master1
192.168.52.128 rocketmq-slave2
192.168.52.128 rocketmq-master2
192.168.52.128 rocketmq-slave1
配置完畢后重啟網卡,應用配置(centos6和7的命令不太一樣,如果是7參考原筆記)
service network restart
2) 關閉防火墻
# 關閉防火墻
service iptables stop firewalld.service
# 查看防火墻的狀態
service iptables status
# 禁止firewall開機啟動
chkconfig iptables off
3) 配置jdk
詳見JAVA —— RocketMQ ①
4) 配置服務器環境
在同一個虛擬機上配置集群環境:
?rocketmq: 配置broker-a的主和broker-b-s從
?rocketmq2:配置broker-b的主和broker-a-s從
將rocketmq 解壓至跟目錄 /opt/rocketmq-cluster
# 解壓
unzip rocketmq-all-4.5.2-bin-release.zip -d /opt/rocketmq-cluster
# 修改目錄名稱
mv rocketmq-all-4.5.2-bin-release rocketmq
#復制一個出來
cp rocketmq/ -R rocketmq2
5) 創建集群服務器的資料存盤目錄
主節點創建四個目錄/ 從節點四個目錄
#配置rocetmq
#a主
mkdir /opt/rocketmq-cluster/rocketmq/store
mkdir /opt/rocketmq-cluster/rocketmq/store/commitlog
mkdir /opt/rocketmq-cluster/rocketmq/store/consumequeue
mkdir /opt/rocketmq-cluster/rocketmq/store/index
mkdir /opt/rocketmq-cluster/rocketmq/store/abortfile
#b從
mkdir /opt/rocketmq-cluster/rocketmq/store-slave
mkdir /opt/rocketmq-cluster/rocketmq/store-slave/commitlog
mkdir /opt/rocketmq-cluster/rocketmq/store-slave/consumequeue
mkdir /opt/rocketmq-cluster/rocketmq/store-slave/index
mkdir /opt/rocketmq-cluster/rocketmq/store-slave/abortfile
#配置rocetmq2
#b主
mkdir /opt/rocketmq-cluster/rocketmq2/store
mkdir /opt/rocketmq-cluster/rocketmq2/store/commitlog
mkdir /opt/rocketmq-cluster/rocketmq2/store/consumequeue
mkdir /opt/rocketmq-cluster/rocketmq2/store/index
mkdir /opt/rocketmq-cluster/rocketmq2/store/abortfile
#a從
mkdir /opt/rocketmq-cluster/rocketmq2/store-slave
mkdir /opt/rocketmq-cluster/rocketmq2/store-slave/commitlog
mkdir /opt/rocketmq-cluster/rocketmq2/store-slave/consumequeue
mkdir /opt/rocketmq-cluster/rocketmq2/store-slave/index
mkdir /opt/rocketmq-cluster/rocketmq2/store-slave/abortfile
注意master與slave如果在同一個虛擬機中部署,需要將存盤目錄區分開
6) 修改配置
(不同的節點,應該修改不同的配置,檔案夾也應該不一樣)
兩個命名服務器:
192.168.52.128:9876
192.168.52.128:5432
broker集群:
192.168.52.128:11011 a主
192.168.52.128:11111 a從
192.168.52.128:10811 b主
192.168.52.128:10911 b從
修改rocketmq的相關配置
6.1 修改a的master
>cd /opt/rocketmq-cluster/rocketmq/conf/2m-2s-sync
>vim broker-a.proerties
此時broker-a的埠為:11011
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的組態檔填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:5432
#在發送訊息時,自動創建服務器不存在的topic,默認創建的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=11011
#洗掉檔案時間點,默認凌晨 4點
deleteWhen=04
#檔案保留時間,默認 48 小時
fileReservedTime=48
#commitLog每個檔案的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁盤空間
diskMaxUsedSpaceRatio=88
#存盤路徑
storePathRootDir=/opt/rocketmq-cluster/rocketmq/store
#commitLog 存盤路徑
storePathCommitLog=/opt/rocketmq-cluster/rocketmq/store/commitlog
#消費佇列存盤路徑存盤路徑
storePathConsumeQueue=/opt/rocketmq-cluster/rocketmq/store/consumequeue
#訊息索引存盤路徑
storePathIndex=/opt/rocketmq-cluster/rocketmq/store/index
#checkpoint 檔案存盤路徑
storeCheckpoint=/opt/rocketmq-cluster/rocketmq/store/checkpoint
#abort 檔案存盤路徑
abortFile=/opt/rocketmq-cluster/rocketmq/store/abortfile
#限制的訊息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128
6.2 修改b的slave
>cd /opt/rocketmq-cluster/rocketmq/conf/2m-2s-sync
>vim broker-b-s.proerties
此時broker-b-s從的埠為:10911
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的組態檔填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:5432
#在發送訊息時,自動創建服務器不存在的topic,默認創建的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10911
#洗掉檔案時間點,默認凌晨 4點
deleteWhen=04
#檔案保留時間,默認 48 小時
fileReservedTime=48
#commitLog每個檔案的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁盤空間
diskMaxUsedSpaceRatio=88
#存盤路徑
storePathRootDir=/opt/rocketmq-cluster/rocketmq/store-slave
#commitLog 存盤路徑
storePathCommitLog=/opt/rocketmq-cluster/rocketmq/store-slave/commitlog
#消費佇列存盤路徑存盤路徑
storePathConsumeQueue=/opt/rocketmq-cluster/rocketmq/store-slave/consumequeue
#訊息索引存盤路徑
storePathIndex=/opt/rocketmq-cluster/rocketmq/store-slave/index
#checkpoint 檔案存盤路徑
storeCheckpoint=/opt/rocketmq-cluster/rocketmq/store-slave/checkpoint
#abort 檔案存盤路徑
abortFile=/opt/rocketmq-cluster/rocketmq/store-slave/abortfile
#限制的訊息大小
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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128
檢查啟動記憶體 (nameserver 和broker 均需要修改)
vim /opt/rocketmq-cluster/rocketmq/bin/runbroker.sh
vim /opt/rocketmq-cluster/rocketmq/bin/runserver.sh
# 開發環境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
rocketmq的nameserver默認埠為9876,不用修改,
修改rocketmq2的相關配置
6.3 修改b的master
>cd /opt/rocketmq-cluster/rocketmq2/conf/2m-2s-sync
>vim broker-b.proerties
此時broker-b的埠為:10811
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:5432
#在發送訊息時,自動創建服務器不存在的topic,默認創建的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10811
#洗掉檔案時間點,默認凌晨 4點
deleteWhen=04
#檔案保留時間,默認 48 小時
fileReservedTime=48
#commitLog每個檔案的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁盤空間
diskMaxUsedSpaceRatio=88
#存盤路徑
storePathRootDir=/opt/rocketmq-cluster/rocketmq2/store
#commitLog 存盤路徑
storePathCommitLog=/opt/rocketmq-cluster/rocketmq2/store/commitlog
#消費佇列存盤路徑存盤路徑
storePathConsumeQueue=/opt/rocketmq-cluster/rocketmq2/store/consumequeue
#訊息索引存盤路徑
storePathIndex=/opt/rocketmq-cluster/rocketmq2/store/index
#checkpoint 檔案存盤路徑
storeCheckpoint=/opt/rocketmq-cluster/rocketmq2/store/checkpoint
#abort 檔案存盤路徑
abortFile=/opt/rocketmq-cluster/rocketmq2/store/abortfile
#限制的訊息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128
6.4 修改b的slave
>cd /opt/rocketmq-cluster/rocketmq2/conf/2m-2s-sync
>vim broker-a-s.proerties
此時broker-a-s從的埠為:11111
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的組態檔填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:5432
#在發送訊息時,自動創建服務器不存在的topic,默認創建的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=11111
#洗掉檔案時間點,默認凌晨 4點
deleteWhen=04
#檔案保留時間,默認 48 小時
fileReservedTime=48
#commitLog每個檔案的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁盤空間
diskMaxUsedSpaceRatio=88
#存盤路徑
storePathRootDir=/opt/rocketmq-cluster/rocketmq2/store-slave
#commitLog 存盤路徑
storePathCommitLog=/opt/rocketmq-cluster/rocketmq2/store-slave/commitlog
#消費佇列存盤路徑存盤路徑
storePathConsumeQueue=/opt/rocketmq-cluster/rocketmq2/store-slave/consumequeue
#訊息索引存盤路徑
storePathIndex=/opt/rocketmq-cluster/rocketmq2/store-slave/index
#checkpoint 檔案存盤路徑
storeCheckpoint=/opt/rocketmq-cluster/rocketmq2/store-slave/checkpoint
#abort 檔案存盤路徑
abortFile=/opt/rocketmq-cluster/rocketmq2/store-slave/abortfile
#限制的訊息大小
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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128
檢查啟動記憶體 (nameserver 和broker 均需要修改)
vim /opt/rocketmq-cluster/rocketmq2/bin/runbroker.sh
vim /opt/rocketmq-cluster/rocketmq2/bin/runserver.sh
# 開發環境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
修改rocketmq2的nameserver 的埠 為5432:
conf目錄下新增:
vi namesrv.properties
添加內容為:
listenPort=5432
先啟動nameserver:
# 進入/opt/rocketmq-cluster/rocketmq/bin目錄
nohup ./mqnamesrv &
# 進入/opt/rocketmq-cluster/rocketmq2/bin目錄
nohup ./mqnamesrv -c ../conf/namesrv.properties &
再啟動brokerserver:
# 進入/opt/rocketmq-cluster/rocketmq/bin目錄
nohup ./mqbroker -c ../conf/2m-2s-sync/broker-a.properties &
nohup ./mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties &
# 進入/opt/rocketmq-cluster/rocketmq2/bin目錄
nohup ./mqbroker -c ../conf/2m-2s-sync/broker-b.properties &
nohup ./mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties &
nohup和&的區別
& : 指在后臺運行
nohup : 不掛斷的運行,注意并沒有后臺運行的功能,,就是指,用nohup運行命令可以使命令永久的執行下去,和用戶終端沒有關系,例如我們斷開SSH連接都不會影響他的運行,注意了nohup沒有后臺運行的意思;&才是后臺運行
集群啟動腳本:rocketmq-cluster-start.sh
#!/bin/bash
#啟動nameserver
sh /opt/rocketmq-cluster/rocketmq/bin/mqnamesrv &
sh /opt/rocketmq-cluster/rocketmq2/bin/mqnamesrv -c /opt/rocketmq-cluster/rocketmq2/conf/namesrv.properties &
#啟動brokerserver
sh /opt/rocketmq-cluster/rocketmq/bin/mqbroker -c /opt/rocketmq-cluster/rocketmq/conf/2m-2s-sync/broker-a.properties &
sh /opt/rocketmq-cluster/rocketmq/bin/mqbroker -c /opt/rocketmq-cluster/rocketmq/conf/2m-2s-sync/broker-b-s.properties &
sh /opt/rocketmq-cluster/rocketmq2/bin/mqbroker -c /opt/rocketmq-cluster/rocketmq2/conf/2m-2s-sync/broker-b.properties &
sh /opt/rocketmq-cluster/rocketmq2/bin/mqbroker -c /opt/rocketmq-cluster/rocketmq2/conf/2m-2s-sync/broker-a-s.properties &
集群啟動腳本:rocketmq-cluster-stop.sh
#!/bin/bash
#關閉nameserver
sh /opt/rocketmq-cluster/rocketmq/bin/mqshutdown namesrv &
#關閉brokerserver
sh /opt/rocketmq-cluster/rocketmq/bin/mqshutdown broker &
四,配置rocketmq-console
進入/opt/rocketmq-cluster/rocketmq-console目錄下:
rocketmq-console-2.0.0.jar 為打包好的 springboot應用程式
application.properties 為外部組態檔,根據自己的需求進行修改
執行如下命令啟動即可:
java -jar rocketmq-console-2.0.0.jar --spring.config.location=application.properties
已做成腳本:直接啟動./start.sh即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/375786.html
標籤:其他
上一篇:一篇文章讓你徹底明白JDBC~
