RocketMQ可分為以下幾種模式:
-
單點模式
-
主從模式
-
雙從模式
-
tar -zxvf rocketmq-4.6.0.tar.gz -C /usr/local mv rocketmq-4.6.0 rocketmq
mkdir /usr/local/rocketmq/store mkdir /usr/local/rocketmq/store/commitlog mkdir /usr/local/rocketmq/store/consumequeue mkdir /usr/local/rocketmq/store/index
rocketmq配置文件
vim /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties
broker配置說明:
參數名 | 默認值 | 說明 |
---|---|---|
listenPort | 10911 | 接受客戶端連接的監聽端口 |
namesrvAddr | null | nameServer 地址 |
brokerIP1 | 網卡的 InetAddress | 當前 broker 監聽的 IP |
brokerIP2 | 跟 brokerIP1 一樣 | 存在主從 broker 時,如果在 broker 主節點上配置了 brokerIP2 屬性,broker 從節點會連接主節點配置的 brokerIP2 進行同步 |
brokerName | null | broker 的名稱 |
brokerClusterName | DefaultCluster | 本 broker 所屬的 Cluser 名稱 |
brokerId | 0 | broker id, 0 表示 master, 其他的正整數表示 slave |
storePathCommitLog | $HOME/store/commitlog/ | 存儲 commit log 的路徑 |
storePathConsumerQueue | $HOME/store/consumequeue/ | 存儲 consume queue 的路徑 |
mappedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
deleteWhen | 04 | 在每天的什么時間刪除已經超過文件保留時間的 commit log |
fileReservedTime | 72 | 以小時計算的文件保留時間 |
brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保證在收到確認生產者之前將消息刷盤。ASYNC_FLUSH 模式下的 broker 則利用刷盤一組消息的模式,可以取得更好的性能。 |
#所屬集群名字 brokerClusterName=rocketmq-cluster #broker 名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-a|broker-b #0 表示 Master, >0 表示 Slave #多網卡需要配置 #brokerIP1=部署broker的ip brokerId=0 #nameServer 地址,分號分割 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876; #在發送消息時,自動創建服務器不存在的 topic,默認創建的隊列數 defaultTopicQueueNums=4 #是否允許 Broker 自動創建 Topic,建議線下開啟,線上關閉 autoCreateTopicEnable=true #是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉 autoCreateSubscriptionGroup=true #Broker 對外服務的監聽端口 listenPort=10911 #刪除文件時間點,默認凌晨 4 點 deleteWhen=04 #文件保留時間,默認 48 小時 fileReservedTime=120 #commitLog 每個文件的大小默認 1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue 每個文件默認存 30W 條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #檢測物理文件磁盤空間 diskMaxUsedSpaceRatio=88 #存儲路徑 storePathRootDir=/usr/local/rocketmq/store #commitLog 存儲路徑 storePathCommitLog=/usr/local/rocketmq/store/commitlog #消費隊列存儲路徑存儲路徑 storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue #消息索引存儲路徑 storePathIndex=/usr/local/rocketmq/store/index #checkpoint 文件存儲路徑 storeCheckpoint=/usr/local/rocketmq/store/checkpoint #abort 文件存儲路徑 abortFile=/usr/local/rocketmq/store/abort #限制的消息大小 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
rocketmq會根據當前網卡選擇一個IP使用,當機器存在多塊多網卡,很有可能會有問題;
Caused by: org.apache.rocketmq.remoting.exception.RemotingConnectException: sendDefaultImpl call timeout
解決多網卡:
1.broker.conf,ip為自己的ip
#namsrv的ip namesrvAddr=192.168.211.128:9876 #部署broker的ip brokerIP1=192.168.211.128
從節點配置
brokerRole修改成SLAVE,brokerId改成大於0;拷貝配置到從節點
scp -r rocketmq/ 192.168.211.129:/usr/local
主節點和從節點啟動namesrv
nohup sh bin/mqnamesrv &
主節點啟動
nohup sh bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &
從節點啟動
nohup sh bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &
修改日志配置文件
mkdir -p /usr/local/rocketmq/logs cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
修改腳本啟動參數
vim /usr/local/rocketmq/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"
vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"