官方簡介:html
相對來講,nameserver的穩定性很是高。緣由有二:linux
1 、nameserver互相獨立,彼此沒有通訊關係,單臺nameserver掛掉,不影響其餘nameserver,即便所有掛掉,也不影響業務系統使用。無狀態算法
2 、nameserver不會有頻繁的讀寫,因此性能開銷很是小,穩定性很高。緩存
因爲消息分佈在各個broker上,一旦某個broker宕機,則該broker上的消息讀寫都會受到影響。因此rocketmq提供了master/slave的結構,salve定時從master同步數據,若是master宕機,則slave提供消費服務,可是不能寫入消息,此過程對應用透明,由rocketmq內部解決。安全
這裏有兩個關鍵點:服務器
集羣消費模式下,一個消費者集羣多臺機器共同消費一個topic的多個隊列,一個隊列只會被一個消費者消費。若是某個消費者掛掉,分組內其它消費者會接替掛掉的消費者繼續消費。網絡
每隔一段時間將各個隊列的消費進度存儲到對應的broker上,該時間由DefaultMQPushConsumer的persistConsumerOffsetInterval屬性控制,默認爲5秒,可手動設置。架構
一個鏈接,消費單位與隊列相關,消費鏈接只跟broker相關,事實上,消費者將全部隊列的消息拉取任務放到本地的隊列,挨個拉取,拉取完畢後,又將拉取任務放到隊尾,而後執行下一個拉取任務負載均衡
生產者時間沒有關係,每一個生產者向隊列輪流發送消息異步
這種方式風險較大,一旦Broker 重啓或者宕機時,會致使整個服務不可用,不建議線上環境使用。
一個集羣無 Slave,全是 Master,例如 2 個 Master 或者 3 個 Master
優勢:配置簡單,單個Master 宕機或重啓維護對應用無影響,在磁盤配置爲 RAID10 時,即便機器宕機不可恢復狀況下,由與 RAID10 磁盤很是可靠,消息也不會丟(異步刷盤丟失少許消息,同步刷盤一條不丟)。性能最高。
缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復以前不可訂閱,消息實時性會受到受到影響。
### 先啓動 NameServer,例如機器 IP 爲:172.16.8.106:9876
|
|
### 在機器 A,啓動第一個 Master
|
|
### 在機器 B,啓動第二個 Master
|
|
每一個 Master 配置一個 Slave,有多對Master-Slave,HA 採用異步複製方式,主備有短暫消息延遲,毫秒級。
優勢:即便磁盤損壞,消息丟失的很是少,且消息實時性不會受影響,由於 Master 宕機後,消費者仍然能夠從 Slave 消費,此過程對應用透明。不須要人工干預。性能同多 Master 模式幾乎同樣。
缺點:Master 宕機,磁盤損壞狀況,會丟失少許消息。
### 先啓動 NameServer,例如機器 IP 爲:172.16.8.106:9876
|
|
### 在機器 A,啓動第一個 Master
|
|
### 在機器 B,啓動第二個 Master
|
|
### 在機器 C,啓動第一個 Slave
|
|
### 在機器 D,啓動第二個 Slave
|
|
每一個 Master 配置一個 Slave,有多對Master-Slave,HA 採用同步雙寫方式,主備都寫成功,嚮應用返回成功。
優勢:數據與服務都無單點,Master宕機狀況下,消息無延遲,服務可用性與數據可用性都很是高
缺點:性能比異步複製模式略低,大約低 10%左右,發送單個消息的 RT 會略高。目前主宕機後,備機不能自動切換爲主機,後續會支持自動切換功能。
### 先啓動 NameServer,例如機器 IP 爲:172.16.8.106:9876
|
|
### 在機器 A,啓動第一個 Master
|
|
### 在機器 B,啓動第二個 Master
|
|
### 在機器 C,啓動第一個 Slave
|
|
### 在機器 D,啓動第二個 Slave
|
|
以上 Broker 與 Slave 配對是經過指定相同的brokerName 參數來配對,Master 的 BrokerId 必須是 0,Slave的BrokerId 必須是大與 0 的數。另一個 Master 下面能夠掛載多個 Slave,同一 Master 下的多個 Slave 經過指定不一樣的 BrokerId 來區分。
參數名 |
默認值 |
說明 |
NamesrvAddr |
|
NameServer地址列表,多個nameServer地址用分號隔開 |
clientIP |
本機IP |
客戶端本機IP地址,某些機器會發生沒法識別客戶端IP地址狀況,須要應用在代碼中強制指定 |
instanceName |
DEFAULT |
客戶端實例名稱,客戶端建立的多個Producer,Consumer實際是共用一個內部實例(這個實例包含網絡鏈接,線程資源等) |
clientCallbackExecutorThreads |
4 |
通訊層異步回調線程數 |
pollNameServerInteval |
30000 |
輪訓Name Server 間隔時間,單位毫秒 |
heartbeatBrokerInterval |
30000 |
向Broker發送心跳間隔時間,單位毫秒 |
persistConsumerOffsetInterval |
5000 |
持久化Consumer消費進度間隔時間,單位毫秒 |
參數名 |
默認值 |
說明 |
producerGroup |
DEFAULT_PRODUCER |
Producer組名,多個Producer若是屬於一個應用,發送一樣的消息,則應該將它們歸爲同一組。 |
createTopicKey |
TBW102 |
在發送消息時,自動建立服務器不存在的topic,須要指定key |
defaultTopicQueueNums |
4 |
在發送消息時,自動建立服務器不存在的topic,默認建立的隊列數 |
sendMsgTimeout |
10000 |
發送消息超時時間,單位毫秒 |
compressMsgBodyOverHowmuch |
4096 |
消息Body超過多大開始壓縮(Consumer收到消息會自動解壓縮),單位字節 |
retryAnotherBrokerWhenNotStoreOK |
FALSE |
若是發送消息返回sendResult,可是sendStatus!=SEND_OK,是否重試發送 |
maxMessageSize |
131072 |
客戶端限制的消息大小,超過報錯,同時服務端也會限制(默認128K) |
transactionCheckListener |
|
事物消息回查監聽器,若是發送事務消息,必須設置 |
checkThreadPoolMinSize |
1 |
Broker回查Producer事務狀態時,線程池大小 |
checkThreadPoolMaxSize |
1 |
Broker回查Producer事務狀態時,線程池大小 |
checkRequestHoldMax |
2000 |
Broker回查Producer事務狀態時,Producer本地緩衝請求隊列大小 |
參數名 |
默認值 |
說明 |
consumerGroup |
DEFAULT_CONSUMER |
Consumer組名,多個Consumer若是屬於一個應用,訂閱一樣的消息,且消費邏輯一致,則應將它們歸爲同一組 |
messageModel |
CLUSTERING |
消息模型,支持如下兩種1.集羣消費2.廣播消費 |
consumeFromWhere |
CONSUME_FROM_LAST_OFFSET |
Consumer啓動後,默認從什麼位置開始消費 |
allocateMessageQueueStrategy |
AllocateMessageQueueAveragely |
Rebalance算法實現策略 |
Subscription |
{} |
訂閱關係 |
messageListener |
|
消息監聽器 |
offsetStore |
|
消費進度存儲 |
consumeThreadMin |
10 |
消費線程池數量 |
consumeThreadMax |
20 |
消費線程池數量 |
consumeConcurrentlyMaxSpan |
2000 |
單隊列並行消費容許的最大跨度 |
pullThresholdForQueue |
1000 |
拉消息本地隊列緩存消息最大數 |
Pullinterval |
0 |
拉消息間隔,因爲是長輪詢,因此爲0,可是若是應用了流控,也能夠設置大於0的值,單位毫秒 |
consumeMessageBatchMaxSize |
1 |
批量消費,一次消費多少條消息 |
pullBatchSize |
32 |
批量拉消息,一次最多拉多少條 |
參數名 |
默認值 |
說明 |
consumerGroup |
|
Conusmer組名,多個Consumer若是屬於一個應用,訂閱一樣的消息,且消費邏輯一致,則應該將它們歸爲同一組 |
brokerSuspendMaxTimeMillis |
20000 |
長輪詢,Consumer拉消息請求在Broker掛起最長時間,單位毫秒 |
consumerPullTimeoutMillis |
10000 |
非長輪詢,拉消息超時時間,單位毫秒 |
consumerTimeoutMillisWhenSuspend |
30000 |
長輪詢,Consumer拉消息請求咋broker掛起超過指定時間,客戶端認爲超時,單位毫秒 |
messageModel |
BROADCASTING |
消息模型,支持如下兩種:1集羣消費 2廣播模式 |
messageQueueListener |
|
監聽隊列變化 |
offsetStore |
|
消費進度存儲 |
registerTopics |
|
註冊的topic集合 |
allocateMessageQueueStrategy |
|
Rebalance算法實現策略 |
查看Broker默認配置
sh mqbroker -m
參數名 |
默認值 |
說明 |
consumerGroup |
|
Conusmer組名,多個Consumer若是屬於一個應用,訂閱一樣的消息,且消費邏輯一致,則應該將它們歸爲同一組 |
listenPort |
10911 |
Broker對外服務的監聽端口 |
namesrvAddr |
Null |
Name Server地址 |
brokerIP1 |
本機IP |
本機IP地址,默認系統自動識別,可是某些多網卡機器會存在識別錯誤的狀況,這種狀況下能夠人工配置。 |
brokerName |
本機主機名 |
|
brokerClusterName |
DefaultCluster |
Broker所屬哪一個集羣 |
brokerId |
0 |
BrokerId,必須是大等於0的整數,0表示Master,>0表示Slave,一個Master能夠掛多個Slave,Master和Slave經過BrokerName來配對 |
storePathCommitLog |
$HOME/store/commitlog |
commitLog存儲路徑 |
storePathConsumeQueue |
$HOME/store/consumequeue |
消費隊列存儲路徑 |
storePathIndex |
$HOME/store/index |
消息索引存儲隊列 |
deleteWhen |
4 |
刪除時間時間點,默認凌晨4點 |
fileReservedTime |
48 |
文件保留時間,默認48小時 |
maxTransferBytesOnMessageInMemory |
262144 |
單次pull消息(內存)傳輸的最大字節數 |
maxTransferCountOnMessageInMemory |
32 |
單次pull消息(內存)傳輸的最大條數 |
maxTransferBytesOnMessageInMemory |
65535 |
單次pull消息(磁盤)傳輸的最大字節數 |
maxTransferCountOnMessageInDisk |
8 |
單次pull消息(磁盤)傳輸的最大條數 |
messageIndexEnable |
TRUE |
是否開啓消息索引功能 |
messageIndexSafe |
FALSE |
是否提供安全的消息索引機制,索引保證不丟 |
brokerRole |
ASYNC_MASTER |
Broker的角色 -ASYNC_MASTER異步複製Master -SYNC_MASTER同步雙寫Master -SLAVE |
flushDiskType |
ASYNC_FLUSH |
刷盤方式 -ASYNC_FLUSH異步刷盤 -SYNC_FLUSH同步刷盤 |
cleanFileForciblyEnable |
TRUE |
磁盤滿,且無過時文件狀況下TRUE表示強制刪除文件,優先保證服務可用 FALSE標記服務不可用,文件不刪除 |