主頁 >  其他 > JAVA —— RocketMQ ②

JAVA —— RocketMQ ②

2021-12-08 08:06:14 其他

文章目錄

  • 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~

下一篇:CentOS7集群安裝JDK1.8

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more