RocketMq系列,第一章
1、MQ介紹
1.1、爲什麼要用MQ
消息隊列是一種“先進先出”的數據結構
其應用場景主要包含以下3個方面
1.1.1、應用解耦
系統的耦合性越高,容錯性就越低。以電商應用爲例,用戶創建訂單後,如果耦合調用庫存系統、物流系統、支付系統,任何一個子系統出了故障或者因爲升級等原因暫時不可用,都會造成下單操作異常,影響用戶使用體驗。
使用消息隊列解耦合。比如物流系統發生故障,需要幾分鐘才能來修復,在這段時間內,物流系統要處理的數據被緩存到消息隊列中,用戶的下單操作正常完成。當物流系統恢復後,補充處理存在消息隊列中的訂單消息即可,終端系統感知不到物流系統發生過幾分鐘故障。
1.1.2、流量削封
應用系統如果遇到系統請求流量的瞬間猛增,有可能會將系統壓垮。有了消息隊列可以將大量請求緩存起來,分散到很長一段時間處理,這樣可以大大提到系統的穩定性和用戶體驗。
一般情況,爲了保證系統的穩定性,如果系統負載超過閾值,就會阻止用戶請求,這會影響用戶體驗,而如果使用消息隊列將請求緩存起來,等待系統處理完畢後通知用戶下單完畢,這樣總體下單體驗要好。
出於經濟考量的目的
業務系統正常時段的QPS如果是1000,流量最高峯是10000,爲了應對流量高峯配置高性能的服務器顯然不划算,這時可以使用消息隊列對峯值流量削峯。
1.1.3、數據分發
通過消息隊列可以讓數據在多個系統更加之間進行流通。數據的產生方不需要關心誰來使用數據,只需要將數據發送到消息隊列,數據使用方直接在消息隊列中直接獲取數據即可。
1.2、MQ的優缺點
優點:解耦、削峯、數據分發
缺點:
-
系統可用性降低
系統引入的外部依賴越多,系統穩定性越差。一旦MQ宕機,就會對業務造成影響。
【需保證MQ的高可用】
-
系統複雜度提高
MQ的加入大大增加了系統的複雜度,以前系統間是同步的遠程調用,現在是通過MQ進行異步調用。
【保證消息不被重複消費,保證消息不丟失,保證消息傳遞的順序性】
-
一致性問題
A系統處理完業務,通過MQ給B、C、D三個系統發消息數據,如果B系統、C系統處理成功,D系統處理失敗。
【如何保證消息數據處理的一致性?】
1.3、常用MQ比較
2、RocketMq快速入門
RocketMQ是阿里巴巴2016年MQ中間件,使用Java語言開發,在阿里內部,RocketMQ承接了例如“雙11”等高併發場景的消息流轉,能夠處理萬億級別的消息。
2.1、下載安裝
RocketMq最新版本:4.6.0 release
解壓,進入安裝目錄
#解壓:
unzip rocketmq-all-4.6.0-bin-release.zip
#移動至opt
mv rocketmq-all-4.6.0-bin-release /opt
#重命名
mv rocketmq-all-4.6.0-bin-release rocketmq
環境變量配置
##進入配置文件
vim /etc/profile
##設置環境變量--不在bin目錄下 也可以使用rocketmq命令
ROCKETMQ_HOME=/opt/rocketmq
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
##使配置文件生肖
source /etc/profile
目錄結構
bin: 啓動腳本等
conf: 實例配置文件,如broker的配置文件,集羣的配置文件,logback的配置文件等
lib: rockermq依賴jar包
2.2、RocketMq角色概念
2.2.1)、消息生產者Producer
負責生產消息,一般由業務系統負責生產消息。----類似:發信者
消息生產者,生產者的作用就是將消息發送到 MQ,生產者本身既可以產生消息,也可以對外提供接口,由外部應用來調用接口,再由生產者將收到的消息發送到 MQ。
2.2.2)、消息消費者Consumer
負責消費消息,一般是後臺系統負責異步消費。----類似:收信者
消費者,從Broker拉取消息進行消費。從應用角度來說有兩類消費者:
①、PullConsumer:應用通常主動調用Consumer的拉消息方法從Broker服務器拉消息、主動權由應用控制。一旦獲取了批量消息,應用就會啓動消費過程。
②、PushConsumer:該模式下Broker收到數據後會主動推送給消費端,該消費模式一般實時性較高。
2.2.3)、Broker
broker主要負責消息的存儲、投遞和查詢以及服務高可用保證。--類似郵局
主要包含以下幾個重要模塊:
①、Remoting Module:整個broker的實體,負責處理來自clients端的請求。
②、Client Manager:負責管理客戶端(Producer/Consumer)和維護Consumer的topic訂閱信息
③、Store Service:提供方便簡單的API接口處理消息存儲到物理硬盤和查詢功能。
④、HA Service:高可用服務,提供master broker 和 slave broker之間的數據同步功能。
⑤、Index Service:根據特定的Message key對投遞到broker的消息進行索引服務,以提供消息的快速查詢。
2.2.4)、Name Server
NameServer其角色類似dubbo中的zookeeper--類似郵局管理者
支持Broker的動態註冊與發現。主要包括兩個功能:
①、Broker管理。
NameServer接受Broker集羣的註冊信息並且保存下來作爲路由信息的基本數據。然後提供心跳檢測機制,檢查Broker是否還存活。
②、路由信息管理。
每個NameServer將保存關於Broker集羣的整個路由信息和用於客戶端查詢的隊列信息。然後Producer和Conumser通過NameServer就可以知道整個Broker集羣的路由信息,從而進行消息的投遞和消費。
NameServer通常也是集羣的方式部署,各實例間相互不進行信息通訊。Broker是向每一臺NameServer註冊自己的路由信息,所以每一個NameServer實例上面都保存一份完整的路由信息。當某個NameServer因某種原因下線了,Broker仍然可以向其它NameServer同步其路由信息,Produce,Consumer仍然可以動態感知Broker的路由的信息。
2.3、Message相關的結構
message是RocketMq消息傳遞的載體,其數據結構如下:
public class Message implements Serializable {
private static final long serialVersionUID = 8445773977080406428L;
private String topic;
private int flag;
private Map<String, String> properties;
private byte[] body;
private String transactionId;
}
2.3.1)、Topic
topic我們可以理解爲第一級消息類型,類比於書的標題。
官方是這麼解釋的:
Topic是生產者發送消息和消費者拉取消息時的消息的類別。Topic與生產者和消費者之間的關係非常鬆散。具體來說,一個Topic可能有0個,一個或多個生產者向它發送消息;相反,一個生產者可以發送不同類型Topic的消息。類似的,消費者組可以訂閱一個或多個主題,只要該組的實例保持其訂閱一致即可。
##在producer中使用消息
Message msg = new Message("baseTopic","tag","hello world..".getBytes());
##在consumer中訂閱消息
consumer.subscribe("baseTopic","tag");
2.3.2)、Tag
tag我們可以理解爲第二級消息類型,類比於書的目錄。便於檢索和使用消息。
官方是這樣定義的:
Tag,換句話的意思就是子主題,爲用戶提供了額外的靈活性。有了標籤,來自同一業務模塊的具有不同目的的消息可以具有相同的主題和不同的標記。標籤有助於保持代碼的清晰和連貫,同時標籤也方便RocketMQ提供的查詢功能。
2.3.3)、Body
producer要發送的消息內容體,以字節數組的形式進行存儲。Message消息會有一定的大小限制。
2.3.4)、TransactionId
TransactionId是當消息是事務消息的時候,相關消息的事務編號。
2.3.5)、Properties
該字段是一個K-V結構。
RockerMq預定義了一組內置屬性,Properties中存儲了Message其餘各項屬性。除了內置屬性之外,用戶還可以設定
任意自定義屬性。(屬性的大小也是有大小限制的)
系統預定義的屬性在org.apache.rocketmq.common.message.MessageConst類中
2.3.6)、其他
groupName:
RocketMq也有組的概念。代表具有相同角色的生產者組合或消費者組合,稱爲生產者組或消費者組。
作用:
在集羣中,當一個生產者producer宕機,本地事務回滾後,可以繼續聯繫該group下的另外一個生產者實例,不至於導致業務走不下去。
在消費者group中,可以實現消費消息的負載均衡和消息容錯。
此外,有了groupName後,集羣的動態擴容就非常方便了。只需要在新加入的機器中配置相同的groupName,該機器啓動後,即可立即加入到所在的group中,參與消息的生產和消費。
producer使用組:
//使用GroupName來初始化Producer,如果不指定,就會使用默認的組名:DEFAULT_PRODUCER
DefaultMQProducer producer = new DefaultMQProducer("group_name_1");
consumer使用組:
//使用GroupName來初始化Consumer,如果不指定,就會使用默認的名字:DEFAULT_CONSUMER
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("group_name_1");
2.3.7)、MessageExt的結構
對於發送方來說上述Message的定義已經足夠,但對於RocketMq的這個處理流程來說,還需要更多的字段來記錄消息的一些必要內容。
比如消息的ID,創建時間,存儲時間等。這就是MessageExt
public class MessageExt extends Message {
private static final long serialVersionUID = 5720810158625748049L;
private int queueId;
private int storeSize;
private long queueOffset;
private int sysFlag;
private long bornTimestamp;
private SocketAddress bornHost;
private long storeTimestamp;
private SocketAddress storeHost;
private String msgId;
private long commitLogOffset;
private int bodyCRC;
private int reconsumeTimes;
private long preparedTransactionOffset;
}
字段 | 用途 |
---|---|
queueId | 記錄MessageQueue編號,消息會被髮送到Topic下的MessageQueue |
storeSize | 記錄消息在Broker存盤大小 |
queueOffset | 記錄在ConsumeQueue中的偏移 |
sysFlag | 記錄一些系統標誌的開關狀態,MessageSysFlag中定義了系統標識 |
bornTimestamp | 消息創建時間,在Producer發送消息時設置 |
storeHost | 記錄存儲該消息的Broker地址 |
msgId | 消息Id |
commitLogOffset | 記錄在Broker中存儲偏移 |
bodyCRC | 消息內容CRC校驗值 |
reconsumeTimes | 消息重試消費次數 |
preparedTransactionOffset | 事務詳細相關字段 |
2.4、RockerMq常用命令
常用端口:
##防火牆中記得開啓
nameserver用:9876
producer用: 10909
consumer用:10911
阿里雲端口安全組配置:
2.4.1)、啓動命令
啓動 NameServer
# 1、啓動nameserver
nohup sh mqnamesrv &
#或
nohup sh mqnamesrv -n 你的IP:9876 &
# 2、查看啓動日誌
tail -f ~/logs/rocketmqlogs/namesrv.log
啓動Broker
# 1.啓動Broker
nohup sh mqbroker -n localhost:9876 &
#或
nohup sh mqbroker -n 你namesrv的IP:9876 -c conf/broker.conf autoCreateTopicEnable=true &
# 2.查看啓動日誌
tail -f ~/logs/rocketmqlogs/broker.log
問題-注意:
由於RockerMq默認的內存都比較大,啓動的時候會因爲內存不足而導致失敗。需要編輯如下兩個配置文件,修改JVM內存的大小。
## 編輯runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# 改爲:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
## 編輯runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# 改爲:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
消息測試:
## consumer接收消息
# 1.設置環境變量
export NAMESRV_ADDR=localhost:9876
# 2.接收消息
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
#######################
## producer發送消息
# 1.設置環境變量
export NAMESRV_ADDR=localhost:9876
# 2.使用安裝包的Demo發送消息
sh tools.sh org.apache.rocketmq.example.quickstart.Producer
注:可以用 jps 查看 啓動狀態
2.4.2)、關閉命令
# 1.關閉NameServer
sh mqshutdown namesrv
# 2.關閉Broker
sh mqshutdown broker
注:可以用 jps 查看 啓動狀態
2.4.3)、mqadmin命令集合
# 在RocketMQ的bin目錄下有一個mqadmin腳本,它充當着控制檯的角色,可以用來完成我們常用的操作。
# 如不喜歡命令可安裝第三方的可視化操控界面工具
## 查看有哪些命令
sh mqadmin
## 查看具體命令怎麼用
sh mqadmin help xxx
2.4.4)、group命令
①、創建訂閱組group
sh mqadmin updateSubGroup -n localhost:9876 -b localhost:10911 -g myGroup
# 參數: -b broker地址 -c 集羣名稱 -g 訂閱組名稱 -n nameserve服務地址列表,格式ip:port;ip:port
②、刪除訂閱組Group
sh mqadmin deleteSubGroup -n localhost:9876 -b localhost:10911 -g myGroup
# 參數: -b broker地址 -c 集羣名稱 -g 訂閱組名稱 -n nameserve服務地址列表,格式ip:port;ip:port
③、查看消費組Group
sh mqadmin consumerProgress -n localhost:9876
2.4.5)、Topic命令
①、創建Topic
sh mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t myTopic
# 參數 -n爲nameServe服務地址 -b爲broker服務地址 -t爲topic的名稱
②、刪除Topic
sh mqadmin deleteTopic -n localhost:9876 -t myTopic
#參數 -n nameserve 服務地址列表,格式ip:port;ip:port; -t爲topic名稱
③、查詢所有Topic
sh mqadmin topicList -n localhost:9876
# 參數 -n爲nameServe服務地址
④、查看topic統計信息
sh mqadmin topicStatus -n localhost:9876 -t myTopic
# 參數 -n爲nameServe服務地址 -t爲topic的名字
其他:
其他命令就不在這裏敘述,可以查看相關幫助命令,如:sh mqadmin 或 sh mqadmin help。
如不喜歡命令可安裝第三方的可視化操控界面工具
2.5、常用配置信息
核心配置信息:
#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
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=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
其他配置信息:
參數名 | 描述 | 默認參數(時間爲單位ms,數據單位爲byte) |
---|---|---|
rocketmqHome | RockerMQ主目錄,默認用戶主目錄 | |
namesrvAddr | NameServer地址 | |
kvConfigPath | kv配置文件路徑,包含順序消息主題的配置信息 | |
configStorePath | NameServer配置文件路徑,建議使用-c指定NameServer配置文件路徑 | |
clusterTest | 是否開啓集羣測試,默認爲false | |
orderMessageEnable | 是否支持順序消息,默認爲false | |
accessMessageInMemoryMaxRatio | 訪問消息在內存中比率,默認爲40 | 40 |
adminBrokerThreadPoolNums | 服務端處理控制檯管理命令線程池線程數量 | 16 |
autoCreateSubscriptionGroup | 是否自動創建消費組 | true |
autoCreateTopicEnable | 是否自動創建主題 | true |
bitMapLengthConsumeQueueExt | ConsumeQueue擴展過濾bitmap大小 | 112 |
brokerClusterName | Broker集羣名稱 | TestCluster |
brokerFastFailureEnable | 是否支持broker快速失敗 如果爲true表示會立即清除發送消息線程池,消息拉取線程池中排隊任務 ,直接返回系統錯誤 | true |
brokerId | brokerID 0表示主節點 大於0表示從節點 | 0 |
brokerIP1 | Broker服務地址 | |
brokerIP2 | BrokerHAIP地址,供slave同步消息的地址 | |
brokerName | Broker服務器名稱morning服務器hostname | broker-a |
brokerPermission | Broker權限 默認爲6表示可讀可寫 | 6 |
brokerRole | broker角色,分爲 ASYNC_MASTER SYNC_MASTER, SLAVE | ASYNC_MASTER |
brokerTopicEnable | broker名稱是否可以用做主體使用 | true |
channelNotActiveInterval | 60000 | |
checkCRCOnRecover | 文件恢復時是否校驗CRC | true |
cleanFileForciblyEnable | 是否支持強行刪除過期文件 | true |
cleanResourceInterval | 清除過期文件線程調度頻率 | 10000 |
clientAsyncSemaphoreValue | 65535 | |
clientCallbackExecutorThreads | 8 | |
clientChannelMaxIdleTimeSeconds | 120 | |
clientCloseSocketIfTimeout | false | |
clientManagerThreadPoolQueueCapacity | 客戶端管理線程池任務隊列初始大小 | 1000000 |
clientManageThreadPoolNums | 服務端處理客戶端管理(心跳 註冊 取消註冊線程數量) | 32 |
clientOnewaySemaphoreValue | 65535 | |
clientPooledByteBufAllocatorEnable | false | |
clientSocketRcvBufSize | 客戶端socket接收緩衝區大小 | 131072 |
clientSocketSndBufSize | 客戶端socket發送緩衝區大小 | 131072 |
clientWorkerThreads | 4 | |
clusterTopicEnable | 集羣名稱是否可用在主題使用 | true |
commercialBaseCount | 1 | |
commercialBigCount | 1 | |
commercialEnable | true | |
commercialTimerCount | 1 | |
commercialTransCount | 1 | |
commitCommitLogLeastPages | 一次提交至少需要髒頁的數量,默認4頁,針對 commitlog文件 | 4 |
commitCommitLogThoroughInterval | Commitlog兩次提交的最大間隔,如果超過該間隔,將忽略commitCommitLogLeastPages直接提交 | 200 |
commitIntervalCommitLog | commitlog提交頻率 | 200 |
compressedRegister | false | |
connectTimeoutMillis | 鏈接超時時間 | 3000 |
consumerFallbehindThreshold | 消息消費堆積閾值默認16GB在disableConsumeifConsumeIfConsumerReadSlowly爲true時生效 | 17179869184 |
consumerManagerThreadPoolQueueCapacity | 消費管理線程池任務隊列大小 | 1000000 |
consumerManageThreadPoolNums | 服務端處理消費管理 獲取消費者列表 更新消費者進度查詢消費進度等 | 32 |
debugLockEnable | 是否支持 PutMessage Lock鎖打印信息 | false |
defaultQueryMaxNum | 查詢消息默認返回條數,默認爲32 | 32 |
defaultTopicQueueNums | 主體在一個broker上創建隊列數量 | 8 |
deleteCommitLogFilesInterval | 刪除commitlog文件的時間間隔,刪除一個文件後等一下再刪除一個文件 | 100 |
deleteConsumeQueueFilesInterval | 刪除consumequeue文件時間間隔 | 100 |
deleteWhen | 磁盤文件空間充足情況下,默認每天什麼時候執行刪除過期文件,默認04表示凌晨4點 | 04 |
destroyMapedFileIntervalForcibly | 銷燬MappedFile被拒絕的最大存活時間,默認120s。清除過期文件線程在初次銷燬mappedfile時,如果該文件被其他線程引用,引用次數大於0.則設置MappedFile的可用狀態爲false,並設置第一次刪除時間,下一次清理任務到達時,如果系統時間大於初次刪除時間加上本參數,則將ref次數一次減1000,知道引用次數小於0,則釋放物理資源 | 120000 |
disableConsumeIfConsumerReadSlowly | 如果消費組消息消費堆積是否禁用該消費組繼續消費消息 | false |
diskFallRecorded | 是否統計磁盤的使用情況,默認爲true | true |
diskMaxUsedSpaceRatio | commitlog目錄所在分區的最大使用比例,如果commitlog目錄所在的分區使用比例大於該值,則觸發過期文件刪除 | 75 |
duplicationEnable | 是否允許重複複製,默認爲 false | false |
enableCalcFilterBitMap | 是否開啓比特位映射,這個屬性不太明白 | false |
enableConsumeQueueExt | 是否啓用ConsumeQueue擴展屬性 | false |
enablePropertyFilter | 是否支持根據屬性過濾 如果使用基於標準的sql92模式過濾消息則改參數必須設置爲true | false |
endTransactionPoolQueueCapacity | 處理提交和回滾消息線程池線程隊列大小 | 100000 |
endTransactionThreadPoolNums | 處理提交和回滾消息線程池 | 24 |
expectConsumerNumUseFilter | 布隆過濾器參數 | 32 |
fastFailIfNoBufferInStorePool | 從 transientStorepool中獲取 ByteBuffer是否支持快速失敗 | false |
fetchNamesrvAddrByAddressServer | 是否支持從服務器獲取nameServer | false |
fileReservedTime | 文件保留時間,默認72小時,表示非當前寫文件最後一次更新時間加上filereservedtime小與當前時間,該文件將被清理 | 120 |
filterDataCleanTimeSpan | 清除過濾數據的時間間隔 | 86400000 |
filterServerNums | broker服務器過濾服務器數量 | 0 |
filterSupportRetry | 消息過濾是否支持重試 | false |
flushCommitLogLeastPages | 一次刷盤至少需要髒頁的數量,針對commitlog文件 | 4 |
flushCommitLogThoroughInterval | commitlog兩次刷盤的最大間隔,如果超過該間隔,將fushCommitLogLeastPages要求直接執行刷盤操作 | 10000 |
flushCommitLogTimed | 表示await方法等待FlushIntervalCommitlog,如果爲true表示使用Thread.sleep方法等待 | false |
flushConsumeQueueLeastPages | 一次刷盤至少需要髒頁的數量,默認2頁,針對 Consume文件 | 2 |
flushConsumeQueueThoroughInterval | Consume兩次刷盤的最大間隔,如果超過該間隔,將忽略 | 60000 |
flushConsumerOffsetHistoryInterval | fushConsumeQueueLeastPages直接刷盤 | 60000 |
flushConsumerOffsetInterval | 持久化消息消費進度 consumerOffse.json文件的頻率ms | 5000 |
flushDelayOffsetInterval | 延遲隊列拉取進度刷盤間隔。默認10s | 10000 |
flushDiskType | 刷盤方式,默認爲 ASYNC_FLUSH(異步刷盤),可選值SYNC_FLUSH(同步刷盤) | ASYNC_FLUSH |
flushIntervalCommitLog | commitlog刷盤頻率 | 500 |
flushIntervalConsumeQueue | consumuQueue文件刷盤頻率 | 1000 |
flushLeastPagesWhenWarmMapedFile | 用字節0填充整個文件的,每多少頁刷盤一次。默認4096頁,異步刷盤模式生效 | 4096 |
forceRegister | 是否強制註冊 | true |
haHousekeepingInterval | Master與save長連接空閒時間,超過該時間將關閉連接 | 20000 |
haListenPort | Master監聽端口,從服務器連接該端口,默認爲10912 | 10912 |
haMasterAddress | Master服務器IP地址與端口號 | |
haSendHeartbeatInterval | Master與Slave心跳包發送間隔 | 5000 |
haSlaveFallbehindMax | 允許從服務器落戶的最大偏移字節數,默認爲256M。超過該值則表示該Slave不可用 | 268435456 |
haTransferBatchSize | 一次HA主從同步傳輸的最大字節長度,默認爲32K | 32768 |
heartbeatThreadPoolNums | 心跳線程池線程數 | 8 |
heartbeatThreadPoolQueueCapacity | 心跳線程隊列數量 | 50000 |
highSpeedMode | 當前版本未使用 | false |
listenPort | 服務端監聽端口 | 10911 |
longPollingEnable | 是否開啓長輪訓 | true |
mapedFileSizeCommitLog | 單個conmmitlog文件大小默認1GB | 1073741824 |
mapedFileSizeConsumeQueue | 單個consumequeue文件大小默認30W*20表示單個Consumequeue文件中存儲30W個ConsumeQueue條目 | 6000000 |
mappedFileSizeConsumeQueueExt | ConsumeQueue擴展文件大小默認48MB | 50331648 |
maxDelayTime | 當前版本未使用 | 40 |
maxErrorRateOfBloomFilter | 布隆過濾器參數 | 20 |
maxHashSlotNum | 單個索引文件hash槽的個數,默認爲五百萬 | 5000000 |
maxIndexNum | 單個索引文件索引條目的個數,默認爲兩千萬 | 20000000 |
maxMessageSize | 默認允許的最大消息體默認4M | 4194304 |
maxMsgsNumBatch | 一次查詢消息最大返回消息條數,默認64條 | 64 |
maxTransferBytesOnMessageInDisk | 一次服務消息端消息拉取,消息在磁盤中傳輸允許的最大字節 | 65536 |
maxTransferBytesOnMessageInMemory | 一次服務端消息拉取,消息在內存中傳輸允許的最大傳輸字節數默認256kb | 262144 |
maxTransferCountOnMessageInDisk | 一次消息服務端消息拉取,消息在磁盤中傳輸允許的最大條數,默認爲8條 | 8 |
maxTransferCountOnMessageInMemory | 一次服務消息拉取,消息在內存中傳輸運行的最大消息條數,默認爲32條 | 32 |
messageDelayLevel | 延遲隊列等級(s=秒,m=分,h=小時) | 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h |
messageIndexEnable | 是否支持消息索引文件 | true |
messageIndexSafe | 消息索引是否安全,默認爲 false,文件恢復時選擇文件檢測點(commitlog.consumeque)的最小的與文件最後更新對比,如果爲true,文件恢復時選擇文件檢測點保存的索引更新時間作爲對比 | false |
messageStorePlugIn | 消息存儲插件地址默認爲空字符串 | |
namesrvAddr | nameServer地址 | |
notifyConsumerIdsChangedEnable | 消費者數量變化後是否立即通知RebalenceService線程,以便馬上進行重新負載 | true |
offsetCheckInSlave | 從服務器是否堅持 offset檢測 | false |
osPageCacheBusyTimeOutMills | putMessage鎖佔用超過該時間,表示 PageCache忙 | 1000 |
pullMessageThreadPoolNums | 服務端處理消息拉取線程池線程數量 默認爲16加上當前操作系統CPU核數的兩倍 | 32 |
pullThreadPoolQueueCapacity | 消息拉去線程池任務隊列初始大小 | 100000 |
putMsgIndexHightWater | 當前版本未使用 | 600000 |
queryMessageThreadPoolNums | 服務端處理查詢消息線程池數量默認爲8加上當前操作系統CPU核數的兩倍 | 16 |
queryThreadPoolQueueCapacity | 查詢消息線程池任務隊列初始大小 | 20000 |
redeleteHangedFileInterval | 重試刪除文件間隔,配合destorymapedfileintervalforcibly | 120000 |
regionId | 消息區域 | DefaultRegion |
registerBrokerTimeoutMills | 註冊broker超時時間 | 6000 |
registerNameServerPeriod | broker註冊頻率 大於1分鐘爲1分鐘小於10秒爲10秒 | 30000 |
rejectTransactionMessage | 是否拒絕事物消息 | false |
rocketmqHome | RocketMQ主目錄 | /home/rocketmq/rocketmq-all-4.3.2-bin-release |
sendMessageThreadPoolNums | 服務端處理消息發送線程池數量 | 1 |
sendThreadPoolQueueCapacity | 消息發送線程池任務隊列初始大小 | 10000 |
serverAsyncSemaphoreValue | 異步消息發送最大併發度 | 64 |
serverCallbackExecutorThreads | netty public任務線程池個數,netty網絡設計沒根據業務類型會創建不同線程池毛筆如處理髮送消息,消息消費心跳檢測等。如果業務類型(RequestCode)未註冊線程池,則由public線程池執行 | 0 |
serverChannelMaxIdleTimeSeconds | 網絡連接最大空閒時間。如果鏈接空閒時間超過此參數設置的值,連接將被關閉 | 120 |
serverOnewaySemaphoreValue | send oneway消息請求併發度 | 256 |
serverPooledByteBufAllocatorEnable | ByteBuffer是否開啓緩存 | true |
serverSelectorThreads | IO線程池線程個數,主要是NameServer.broker端解析請求,返回相應的線程個數,這類縣城主要是處理網絡請求的,解析請求包。然後轉發到各個業務線程池完成具體的業務無操作,然後將結果在返回調用方 | 3 |
serverSocketRcvBufSize | netty網絡socket接收緩存區大小16MB | 131072 |
serverSocketSndBufSize | netty網絡socket發送緩存區大小16MB | 131072 |
serverWorkerThreads | netty業務線程池個數 | 8 |
shortPollingTimeMills | 短輪訓等待時間 | 1000 |
slaveReadEnable | 從節點是否可讀 | false |
startAcceptSendRequestTimeStamp | 0 | |
storePathCommitLog | Commitlog存儲目錄默認爲${storePathRootDir}/commitlog | /home/rocketmq/store/commitlog |
storePathRootDir | broker存儲目錄 默認爲用戶的主目錄/store | /home/rocketmq/store |
syncFlushTimeout | 同步刷盤超時時間 | 5000 |
traceOn | true | |
transactionCheckInterval | 事物回查週期 | 60000 |
transactionCheckMax | 事物回查次數 | 15 |
transactionTimeOut | 事物回查超時時間 | 6000 |
transferMsgByHeap | 消息傳輸是否使用堆內存 | true |
transientStorePoolEnable | Commitlog是否開啓 transientStorePool機制,默認爲 false | false |
transientStorePoolSize | transientStorePool中緩存 ByteBuffer個數,默認5個 | 5 |
useEpollNativeSelector | 是否啓用Epoll IO模型。Linux環境建議開啓 | false |
useReentrantLockWhenPutMessage | 消息存儲到commitlog文件時獲取鎖類型,如果爲true使用ReentrantLock否則使用自旋鎖 | false |
useTLS | 是否使用安全傳輸層協議 | false |
waitTimeMillsInHeartbeatQueue | 清理broker心跳線程等待時間 | 31000 |
waitTimeMillsInPullQueue | 清除消息拉取線程池任務隊列的等待時間。如果系統時間減去任務放入隊列中的時間小於waitTimeMillsInPullQueue,本次請求任務暫時不移除該任務 | 5000 |
waitTimeMillsInSendQueue | 清除發送線程池任務隊列的等待時間。如果系統時間減去任務放入隊列中的時間小於waitTimeMillsInSendQueue,本次請求任務暫時不移除該任務 | 200 |
waitTimeMillsInTransactionQueue | 清理提交和回滾消息線程隊列等待時間 | 3000 |
warmMapedFileEnable | 是否溫和地使用 MappedFile如果爲true,將不強制將內存映射文件鎖定在內存中 | false |
connectWhichBroker | FilterServer連接的Broker地址 | |
filterServerIP | FilterServerIP地址,默認爲本地服務器IP | |
compressMsgBodyOverHowmuch | 如果消息Body超過該值則啓用 | |
zipCompresslevel | Zip壓縮方式,默認爲5,詳細定義請參考java.util.Deflate中的定義 | |
clientUploadFilterClassEnable | 是否支持客戶端上傳 FilterClass代碼 | |
filterClassRepertoryUrl | filterClass服務地址,如果 clientUploadFilterClassEnable爲false,則需要提供一個地址從該服務器獲取過濾類的代碼 | |
fsServerAsyncSemaphorevalue | FilterServer異步請求併發度,默認爲2048 | |
fsServerCallbackExecutorThreads | 處理回調任務的線程池數量,默認爲64 | |
fsServerWorkerThreads | 遠程服務調用線程池數量,默認爲64 |