1. 程式人生 > 實用技巧 >rocketMq資料收集及docker裡叢集搭建筆記

rocketMq資料收集及docker裡叢集搭建筆記

RocketMQ簡介與在docker安裝與部署

一、MQ對比

MQ,是一種跨程序的通訊機制,用於上下游傳遞訊息。在傳統的網際網路架構中通常使用MQ來對上下游來做解耦合。

舉例:當A系統對B系統進行訊息通訊,如A系統釋出一條系統公告,B系統可以訂閱該頻道進行系統公告同步,整個過程中A系統並不關係B系統會不會同步,由訂閱該頻道的系統自行處理。

1.什麼情況下的非同步操作需要使用訊息佇列而不是多執行緒?

(1)訊息佇列和多執行緒兩者並不衝突,多執行緒可以作為佇列的生產者和消費者。
使用外部的訊息佇列時,第一是可以提高應用的穩定性,當程式fail後,已經寫入外部訊息佇列的資料依舊是儲存的,如果使用兩步commit的佇列的話,可以更加提高這個專案。

(2)用執行緒的話,會佔用主伺服器資源,訊息佇列的話,可以放到其他機器上執行,讓主伺服器儘量多的服務其他請求。我個人認為,如果使用者不急著知道結果的操作,用訊息佇列,否則再考慮用不用執行緒。

(3)解耦更充分,架構更合理。多執行緒是在程式語言層面解決問題,訊息佇列是在架構層面解決問題。在架構層面解決問題是“覺悟比較高的方式“,理想情況下應該限制語言層面濫用多執行緒,能不用就不用。

(4)不關心執行結果的都可以放到訊息佇列,不需要及時到達,放到訊息佇列中慢慢消化。

(5)批量傳送郵件時,資料量龐大,如果使用多執行緒對系統不安全。

2.訊息佇列能解決什麼問題

(1)非同步處理

(2)應用解耦:高可用鬆耦合架構設計,對高依賴的專案之間進行解耦,當下遊系統出現宕機,不會影響上游系統的正常執行,或者雪崩。

(3)流量削鋒:使用一些技術手段,來削弱瞬時的請求高峰,讓系統吞吐量在高峰請求下保持可控。主要解決諸如秒殺、搶紅包、企業開門紅等大型活動時皆會帶來較高的流量脈衝,或因沒做相應的保護而導致系統超負荷甚至崩潰,或因限制太過導致請求大量失敗而影響使用者體驗,海量訊息堆積能力強。

(5)日誌處理

(6)訊息通訊

二、什麼是RocketMQ?

隨著使用越來越多的佇列和虛擬主題,ActiveMQ IO模組遇到了瓶頸。我們盡力通過節流,斷路器或降級來解決此問題,但效果不佳。因此,我們那時開始關注流行的訊息傳遞解決方案

Kafka。不幸的是,Kafka不能滿足我們的要求,特別是在低延遲和高可靠性方面。

RcoketMQ 是一款低延遲、高可靠、可伸縮、易於使用的訊息中介軟體。

1、特性

  • 支援釋出/訂閱(Pub/Sub)和點對點(P2P)訊息模型
  • 能夠保證嚴格的訊息順序,在一個佇列中可靠的先進先出(FIFO)和嚴格的順序傳遞
  • 提供豐富的訊息拉取模式,支援拉(pull)和推(push)兩種訊息模式
  • 單一佇列百萬訊息的堆積能力,億級訊息堆積能力
  • 支援多種訊息協議,如 JMSMQTT
  • 分散式高可用的部署架構,滿足至少一次訊息傳遞語義

2、角色介紹:

1)生產者

生產者(Producer)負責產生訊息,生產者向訊息伺服器傳送由業務應用程式系統生成的訊息。 RocketMQ 提供了三種方式傳送訊息:同步、非同步和單向。

  • 同步傳送

同步傳送指訊息傳送方發出資料後會在收到接收方發回響應之後才發下一個數據包。一般用於重要通知訊息,例如重要通知郵件、營銷簡訊。

  • l非同步傳送

非同步傳送指傳送方發出資料後,不等接收方發回響應,接著傳送下個數據包,一般用於可能鏈路耗時較長而對響應時間敏感的業務場景,例如使用者視訊上傳後通知啟動轉碼服務。

  • 單向傳送

單向傳送是指只負責傳送訊息而不等待伺服器迴應且沒有回撥函式觸發,適用於某些耗時非常短但對可靠性要求並不高的場景,例如日誌收集。

  • 生產者組

生產者組(Producer Group)是一類 Producer 的集合,這類 Producer 通常傳送一類訊息並且傳送邏輯一致,所以將這些 Producer 分組在一起。從部署結構上看生產者通過 Producer Group 的名字來標記自己是一個叢集。

2)消費者

消費者(Consumer)負責消費訊息,消費者從訊息伺服器拉取資訊並將其輸入使用者應用程式。站在使用者應用的角度消費者有兩種型別:拉取型消費者、推送型消費者。

  • 拉取型消費者

拉取型消費者(Pull Consumer)主動從訊息伺服器拉取資訊,只要批量拉取到訊息,使用者應用就會啟動消費過程,所以 Pull 稱為主動消費型。

  • 推送型消費者

推送型消費者(Push Consumer)封裝了訊息的拉取、消費進度和其他的內部維護工作,將訊息到達時執行的回撥介面留給使用者應用程式來實現。所以 Push 稱為被動消費型別,但從實現上看還是從訊息伺服器中拉取訊息,不同於 Pull 的是 Push 首先要註冊消費監聽器,當監聽器處觸發後才開始消費訊息。

  • 消費者組

消費者組(Consumer Group)一類 Consumer 的集合名稱,這類 Consumer 通常消費同一類訊息並且消費邏輯一致,所以將這些 Consumer 分組在一起。消費者組與生產者組類似,都是將相同角色的分組在一起並命名,分組是個很精妙的概念設計,RocketMQ 正是通過這種分組機制,實現了天然的訊息負載均衡。消費訊息時通過 Consumer Group 實現了將訊息分發到多個消費者伺服器例項,比如某個 Topic 9條訊息,其中一個 Consumer Group 3個例項(3個程序或3臺機器),那麼每個例項將均攤3條訊息,這也意味著我們可以很方便的通過加機器來實現水平擴充套件。

3)訊息伺服器

訊息伺服器(Broker)是訊息儲存中心,主要作用是接收來自 Producer 的訊息並存儲, Consumer 從這裡取得訊息。它還儲存與訊息相關的元資料,包括使用者組、消費進度偏移量、佇列資訊等。從部署結構圖中可以看出 Broker Master Slave 兩種型別,Master 既可以寫又可以讀,Slave 不可以寫只可以讀。從物理結構上看 Broker 的叢集部署方式有四種:單 Master 、多 Master 、多 Master Slave(同步刷盤)、多 MasterSlave(非同步刷盤)。

  • Master

這種方式一旦 Broker 重啟或宕機會導致整個服務不可用,這種方式風險較大,所以顯然不建議線上環境使用。

  • Master

所有訊息伺服器都是 Master ,沒有 Slave 。這種方式優點是配置簡單,單個 Master 宕機或重啟維護對應用無影響。缺點是單臺機器宕機期間,該機器上未被消費的訊息在機器恢復之前不可訂閱,訊息實時性會受影響。

  • Master 多 Slave(非同步複製)

每個 Master 配置一個 Slave,所以有多對 Master-Slave,訊息採用非同步複製方式,主備之間有毫秒級訊息延遲。這種方式優點是訊息丟失的非常少,且訊息實時性不會受影響,Master 宕機後消費者可以繼續從 Slave 消費,中間的過程對使用者應用程式透明,不需要人工干預,效能同多 Master 方式幾乎一樣。缺點是 Master 宕機時在磁碟損壞情況下會丟失極少量訊息。

  • Master 多 Slave(同步雙寫)

每個 Master 配置一個 Slave,所以有多對 Master-Slave ,訊息採用同步雙寫方式,主備都寫成功才返回成功。這種方式優點是資料與服務都沒有單點問題,Master 宕機時訊息無延遲,服務與資料的可用性非常高。缺點是效能相對非同步複製方式略低,傳送訊息的延遲會略高。

4)名稱伺服器

名稱伺服器(NameServer)用來儲存 Broker 相關元資訊並給 Producer Consumer 查詢 Broker 資訊。NameServer 被設計成幾乎無狀態的,可以橫向擴充套件,節點之間相互之間無通訊,通過部署多臺機器來標記自己是一個偽叢集。每個 Broker 在啟動的時候會到 NameServer 註冊,Producer 在傳送訊息前會根據 Topic NameServer 獲取到 Broker 的路由資訊,Consumer 也會定時獲取 Topic 的路由資訊。所以從功能上看應該是和 ZooKeeper 差不多,據說 RocketMQ 的早期版本確實是使用的 ZooKeeper ,後來改為了自己實現的 NameServer

5)訊息

訊息(Message)就是要傳輸的資訊。一條訊息必須有一個主題(Topic),主題可以看做是你的信件要郵寄的地址。一條訊息也可以擁有一個可選的標籤(Tag)和額處的鍵值對,它們可以用於設定一個業務 key 並在 Broker 上查詢此訊息以便在開發期間查詢問題。

6)主題

主題(Topic)可以看做訊息的規類,它是訊息的第一級型別。比如一個電商系統可以分為:交易訊息、物流訊息等,一條訊息必須有一個 Topic Topic 與生產者和消費者的關係非常鬆散,一個 Topic 可以有0個、1個、多個生產者向其傳送訊息,一個生產者也可以同時向不同的 Topic 傳送訊息。一個 Topic 也可以被 0個、1個、多個消費者訂閱。

7)標籤

標籤(Tag)可以看作子主題,它是訊息的第二級型別,用於為使用者提供額外的靈活性。使用標籤,同一業務模組不同目的的訊息就可以用相同 Topic 而不同的 Tag 來標識。比如交易訊息又可以分為:交易建立訊息、交易完成訊息等,一條訊息可以沒有 Tag 。標籤有助於保持您的程式碼乾淨和連貫,並且還可以為 RocketMQ 提供的查詢系統提供幫助。

8)訊息佇列

訊息佇列(Message Queue),主題被劃分為一個或多個子主題,即訊息佇列。一個 Topic 下可以設定多個訊息佇列,傳送訊息時執行該訊息的 Topic RocketMQ 會輪詢該 Topic 下的所有佇列將訊息發出去。下圖 Broker 內部訊息情況:

  • 訊息消費模式

訊息消費模式有兩種:叢集消費(Clustering)和廣播消費(Broadcasting)。預設情況下就是叢集消費,該模式下一個消費者叢集共同消費一個主題的多個佇列,一個佇列只會被一個消費者消費,如果某個消費者掛掉,分組內其它消費者會接替掛掉的消費者繼續消費。而廣播消費訊息會發給消費者組中的每一個消費者進行消費。

  • 訊息順序

訊息順序(Message Order)有兩種:順序消費(Orderly)和並行消費(Concurrently)。順序消費表示訊息消費的順序同生產者為每個訊息佇列傳送的順序一致,所以如果正在處理全域性順序是強制性的場景,需要確保使用的主題只有一個訊息佇列。並行消費不再保證訊息順序,消費的最大並行數量受每個消費者客戶端指定的執行緒池限制。

三、docker搭建環境(單機)

1、環境介紹

注意儘量將rocketmq的應用版本、jar包依賴、recketmq-console-ng的jar包依賴版本保持一致,不然可能會出現非常詭異的問題
本次使用版本: rocketmq: 4.4.0OS: win10

2、拉取映象

docker pull rocketmqinc/rocketmq:latest

3、準備工作,掛載相關配置檔案

‘pwd’為當前目錄如:/home/dsj/jn/zhugaopo/rocketmq/

mkdir conf //配置檔案
mkdir data //資料檔案、日誌等等
cd conf
touch broker.conf
vim broker.conf

broker.conf 中寫入如下內容

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
#brokerIP1 = {本地公網 IP}
brokerIP1 = 172.16.0.161

cd /home/dsj/jn/zhugaopo/rocketmq/

4、啟動namesrv服務(建立執行容器)

docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:latest sh mqnamesrv

5、啟動broker服務

docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store -v `pwd`/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:latestsh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

四、安裝 rocketmq 控制檯

1、拉取映象

docker pull styletang/rocketmq-console-ng:latest

2、啟動rocketmq 控制檯

docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.0.161:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng

五、rocketmq 叢集(雙主雙從)

1、叢集搭建

官方網址:http://rocketmq.apache.org/dowloading/releases/

下面模擬兩臺機器上搭建叢集 --主從散落在不同節點上

名稱

broker角色

IP&port

nameSer-161

註冊服務中心

17216.0.161:9876

nameSer-163

註冊服務中心

17216.0.163:9876

broker-161-m

master

17216.0.161:10911 broker-161-m.conf

broker-163-s

slave

17216.0.163:11011 broker-163-s.conf

broker-163-m

master

17216.0.163:10911broker-163-m.conf

broker-161-s

slave

17216.0.161:11011 broker-161-s.conf

1.1、新增域名

分別 vim /etc/hosts 新增

172.16.0.161 rmqnamesrv-161

172.16.0.163 rmqnamesrv-163

生效 /etc/init.d/network restart

1.2broker配置

161主配置

#所屬叢集名字

brokerClusterName=rocketmq-cluster

#broker名字,名字可重複,為了管理,每個master起一個名字,他的slave同他,eg:Amasterbroker-161,他的slave也叫broker-161

brokerName=broker-161

#0 表示 Master>0 表示 Slave

brokerId=0

#nameServer地址,分號分割

namesrvAddr=172.16.0.161:9876;172.16.0.163: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

#docker掛載就不用下面的路徑

#限制的訊息大小

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

163從配置

#所屬叢集名字

brokerClusterName=rocketmq-cluster

brokerName=broker-163

#0 表示 Master>0 表示 Slave

brokerId=1

#nameServer地址,分號分割

namesrvAddr=172.16.0.161:9876;172.16.0.163:9876

#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數

defaultTopicQueueNums=4

#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉

autoCreateTopicEnable=true

#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉

autoCreateSubscriptionGroup=true

#Broker 對外服務的監聽埠,

#listenPort=10921

#刪除檔案時間點,預設凌晨 4

deleteWhen=04

#檔案保留時間,預設 48 小時

fileReservedTime=120

#commitLog每個檔案的大小預設1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每個檔案預設存30W條,根據業務情況調整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#檢測物理檔案磁碟空間

diskMaxUsedSpaceRatio=88

#docker掛載就不用下面的路徑

#限制的訊息大小

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

163主配置

#所屬叢集名字

brokerClusterName=rocketmq-cluster

brokerName=broker-163

#0 表示 Master>0 表示 Slave

brokerId=0

#nameServer地址,分號分割

namesrvAddr=172.16.0.161:9876;172.16.0.163: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

#docker掛載就不用下面的路徑

#限制的訊息大小

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

161從配置

#所屬叢集名字

brokerClusterName=rocketmq-cluster

brokerName=broker-161

#0 表示 Master>0 表示 Slave

brokerId=1

#nameServer地址,分號分割

namesrvAddr=172.16.0.161:9876;172.16.0.163:9876

#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數

defaultTopicQueueNums=4

#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉

autoCreateTopicEnable=true

#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉

autoCreateSubscriptionGroup=true

#Broker 對外服務的監聽埠,

#listenPort=10921

#刪除檔案時間點,預設凌晨 4

deleteWhen=04

#檔案保留時間,預設 48 小時

fileReservedTime=120

#commitLog每個檔案的大小預設1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每個檔案預設存30W條,根據業務情況調整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#檢測物理檔案磁碟空間

diskMaxUsedSpaceRatio=88

#docker掛載就不用下面的路徑

#限制的訊息大小

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

1.3、啟動namesrv服務

/home/dsj/jn/zhugaopo/docker/rocketmq

docker run -d -p 9876:9876 -v `pwd`/data/namesrv_161/logs:/root/logs -v `pwd`/data/namesrv_161/store:/root/store --name rmqnamesrv-161 -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:latest sh mqnamesrv

--jvm "-Xms512m -Xmx512m -Xmn256m"

docker run -d -p 9876:9876 -v `pwd`/data/namesrv_163/logs:/root/logs -v `pwd`/data/namesrv_163/store:/root/store --name rmqnamesrv-163 -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:latest sh mqnamesrv

--jvm "-Xms512m -Xmx512m -Xmn256m"

1.4、啟動broker服務

161主啟動

docker run -d -p 10911:10911 -p 10909:10909-v `pwd`/data/broker-161-m/logs:/root/logs -v `pwd`/data/broker-161-m/store:/root/store -v `pwd`/conf/broker-161-m.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker-161-m -e "NAMESRV_ADDR=172.16.0.161:9876;172.16.0.163:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:latestsh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

163主啟動

docker run -d -p 10911:10911 -p 10909:10909-v `pwd`/data/broker-163-m/logs:/root/logs -v `pwd`/data/broker-163-m/store:/root/store -v `pwd`/conf/broker-163-m.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker-163-m -e "NAMESRV_ADDR=172.16.0.161:9876;172.16.0.163:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:latestsh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

163從啟動

docker run -d -p 11011:10911 -p 11009:10909-v `pwd`/data/broker-163-s/logs:/root/logs -v `pwd`/data/broker-163-s/store:/root/store -v `pwd`/conf/broker-163-s.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker-163-s -e "NAMESRV_ADDR=172.16.0.161:9876;172.16.0.163:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:latestsh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

161從啟動

docker run -d -p 11011:10911 -p 11009:10909-v `pwd`/data/broker-161-s/logs:/root/logs -v `pwd`/data/broker-161-s/store:/root/store -v `pwd`/conf/broker-161-s.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker-161-s-e "NAMESRV_ADDR=172.16.0.161:9876;172.16.0.163:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:latestsh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

1.5、可能異常

WARNING: IPv4 forwarding is disabled. Networking will not work.

解決辦法:

vi /etc/sysctl.conf

net.ipv4.ip_forward=1 #新增這段程式碼

#重啟network服務

systemctl restart network &&systemctlrestartdocker

然後重啟映象

#檢視是否修改成功 (備註:返回1,就是成功)

[root@docker-node2 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

1.6、啟動rocketmq控制檯服務

docker run -e "JAVA_OPTS=-Drocketmq.namesrv.addr=172.16.0.161:9876;172.16.0.163:9876-Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng