RocketMQ簡介及安裝
一、簡介
官方簡介:
l RocketMQ是一款分散式、佇列模型的訊息中介軟體,具有以下特點:
l 能夠保證嚴格的訊息順序
l 提供豐富的訊息拉取模式
l 高效的訂閱者水平擴充套件能力
l 實時的訊息訂閱機制
l 億級訊息堆積能力
二、網路架構
三、特性
1. nameserver
相對來說,nameserver的穩定性非常高。原因有二:
1 、nameserver互相獨立,彼此沒有通訊關係,單臺nameserver掛掉,不影響其他nameserver,即使全部掛掉,也不影響業務系統使用。
2 、nameserver不會有頻繁的讀寫,所以效能開銷非常小,穩定性很高。
2. broker
2.1與nameserver關係
l 連線
單個broker和所有nameserver保持長連線
l 心跳
心跳間隔:每隔30秒(此時間無法更改)向所有nameserver傳送心跳,心跳包含了自身的topic配置資訊。
心跳超時:nameserver每隔10秒鐘(此時間無法更改),掃描所有還存活的broker連線,若某個連線2分鐘內(當前時間與最後更新時間差值超過2分鐘,此時間無法更改)沒有傳送心跳資料,則斷開連線。
l 斷開
時機:broker掛掉;心跳超時導致nameserver主動關閉連線
動作:一旦連線斷開,nameserver會立即感知,更新topc與佇列的對應關係,但不會通知生產者和消費者
2.2負載均衡
l 一個topic分佈在多個broker上,一個broker可以配置多個topic,它們是多對多的關係。
l 如果某個topic訊息量很大,應該給它多配置幾個佇列,並且儘量多分佈在不同broker上,減輕某個broker的壓力。
l topic訊息量都比較均勻的情況下,如果某個broker上的佇列越多,則該broker壓力越大。
2.3可用性
由於訊息分佈在各個broker上,一旦某個broker宕機,則該broker上的訊息讀寫都會受到影響。所以rocketmq提供了master/slave的結構,salve定時從master同步資料,如果master宕機,則slave提供消費服務,但是不能寫入訊息,此過程對應用透明,由rocketmq內部解決。
這裡有兩個關鍵點:
l 一旦某個broker master宕機,生產者和消費者多久才能發現?受限於rocketmq的網路連線機制,預設情況下,最多需要30秒,但這個時間可由應用設定引數來縮短時間。這個時間段內,發往該broker的訊息都是失敗的,而且該broker的訊息無法消費,因為此時消費者不知道該broker已經掛掉。
l 消費者得到master宕機通知後,轉向slave消費,但是slave不能保證master的訊息100%都同步過來了,因此會有少量的訊息丟失。但是訊息最終不會丟的,一旦master恢復,未同步過去的訊息會被消費掉。
2.4可靠性
l 所有發往broker的訊息,有同步刷盤和非同步刷盤機制,總的來說,可靠性非常高
l 同步刷盤時,訊息寫入物理檔案才會返回成功,因此非常可靠
l 非同步刷盤時,只有機器宕機,才會產生訊息丟失,broker掛掉可能會發生,但是機器宕機崩潰是很少發生的,除非突然斷電
2.5訊息清理
l 掃描間隔
預設10秒,由broker配置引數cleanResourceInterval決定
l 空間閾值
物理檔案不能無限制的一直儲存在磁碟,當磁碟空間達到閾值時,不再接受訊息,broker打印出日誌,訊息傳送失敗,閾值為固定值85%
l 清理時機
預設每天凌晨4點,由broker配置引數deleteWhen決定;或者磁碟空間達到閾值
l 檔案保留時長
預設72小時,由broker配置引數fileReservedTime決定
2.6讀寫效能
l 檔案記憶體對映方式操作檔案,避免read/write系統呼叫和實時檔案讀寫,效能非常高
l 永遠一個檔案在寫,其他檔案在讀
l 順序寫,隨機讀
l 利用linux的sendfile機制,將訊息內容直接輸出到sokect管道,避免系統呼叫
2.7系統特性
l 大記憶體,記憶體越大效能越高,否則系統swap會成為效能瓶頸
l IO密集
l cpu load高,使用率低,因為cpu佔用後,大部分時間在IO WAIT
l 磁碟可靠性要求高,為了兼顧安全和效能,採用RAID10陣列
l 磁碟讀取速度要求快,要求高轉速大容量磁碟
3. 消費者
3.1與nameserver關係
l 連線
單個消費者和一臺nameserver保持長連線,定時查詢topic配置資訊,如果該nameserver掛掉,消費者會自動連線下一個nameserver,直到有可用連線為止,並能自動重連。
l 心跳
與nameserver沒有心跳
l 輪詢時間
預設情況下,消費者每隔30秒從nameserver獲取所有topic的最新佇列情況,這意味著某個broker如果宕機,客戶端最多要30秒才能感知。該時間由DefaultMQPushConsumer的pollNameServerInteval引數決定,可手動配置。
3.2與broker關係
l 連線
單個消費者和該消費者關聯的所有broker保持長連線。
l 心跳
預設情況下,消費者每隔30秒向所有broker傳送心跳,該時間由DefaultMQPushConsumer的heartbeatBrokerInterval引數決定,可手動配置。broker每隔10秒鐘(此時間無法更改),掃描所有還存活的連線,若某個連線2分鐘內(當前時間與最後更新時間差值超過2分鐘,此時間無法更改)沒有傳送心跳資料,則關閉連線,並向該消費者分組的所有消費者發出通知,分組內消費者重新分配佇列繼續消費
l 斷開
時機:消費者掛掉;心跳超時導致broker主動關閉連線
動作:一旦連線斷開,broker會立即感知到,並向該消費者分組的所有消費者發出通知,分組內消費者重新分配佇列繼續消費
3.3負載均衡
叢集消費模式下,一個消費者叢集多臺機器共同消費一個topic的多個佇列,一個佇列只會被一個消費者消費。如果某個消費者掛掉,分組內其它消費者會接替掛掉的消費者繼續消費。
3.4消費機制
l 本地佇列
消費者不間斷的從broker拉取訊息,訊息拉取到本地佇列,然後本地消費執行緒消費本地訊息佇列,只是一個非同步過程,拉取執行緒不會等待本地消費執行緒,這種模式實時性非常高。對消費者對本地佇列有一個保護,因此本地訊息佇列不能無限大,否則可能會佔用大量記憶體,本地佇列大小由DefaultMQPushConsumer的pullThresholdForQueue屬性控制,預設1000,可手動設定。
l 輪詢間隔
訊息拉取執行緒每隔多久拉取一次?間隔時間由DefaultMQPushConsumer的pullInterval屬性控制,預設為0,可手動設定。
l 訊息消費數量
監聽器每次接受本地佇列的訊息是多少條?這個引數由DefaultMQPushConsumer的consumeMessageBatchMaxSize屬性控制,預設為1,可手動設定。
3.5消費進度儲存
每隔一段時間將各個佇列的消費進度儲存到對應的broker上,該時間由DefaultMQPushConsumer的persistConsumerOffsetInterval屬性控制,預設為5秒,可手動設定。
如果一個topic在某broker上有3個佇列,一個消費者消費這3個佇列,那麼該消費者和這個broker有幾個連線?
一個連線,消費單位與佇列相關,消費連線只跟broker相關,事實上,消費者將所有佇列的訊息拉取任務放到本地的佇列,挨個拉取,拉取完畢後,又將拉取任務放到隊尾,然後執行下一個拉取任務
4. 生產者
4.1與nameserver關係
l 連線
單個生產者者和一臺nameserver保持長連線,定時查詢topic配置資訊,如果該nameserver掛掉,生產者會自動連線下一個nameserver,直到有可用連線為止,並能自動重連。
l 輪詢時間
預設情況下,生產者每隔30秒從nameserver獲取所有topic的最新佇列情況,這意味著某個broker如果宕機,生產者最多要30秒才能感知,在此期間,發往該broker的訊息傳送失敗。該時間由DefaultMQProducer的pollNameServerInteval引數決定,可手動配置。
l 心跳
與nameserver沒有心跳
4.2與broker關係
l 連線
單個生產者和該生產者關聯的所有broker保持長連線。
l 心跳
預設情況下,生產者每隔30秒向所有broker傳送心跳,該時間由DefaultMQProducer的heartbeatBrokerInterval引數決定,可手動配置。broker每隔10秒鐘(此時間無法更改),掃描所有還存活的連線,若某個連線2分鐘內(當前時間與最後更新時間差值超過2分鐘,此時間無法更改)沒有傳送心跳資料,則關閉連線。
l 連線斷開
移除broker上的生產者資訊
負載均衡
生產者時間沒有關係,每個生產者向佇列輪流傳送訊息
四、Broker叢集配置方式及優缺點
1. 單個 Master
這種方式風險較大,一旦Broker 重啟或者宕機時,會導致整個服務不可用,不建議線上環境使用。
2. 多 Master 模式
一個叢集無 Slave,全是 Master,例如 2 個 Master 或者 3 個 Master
優點:配置簡單,單個Master 宕機或重啟維護對應用無影響,在磁碟配置為 RAID10 時,即使機器宕機不可恢復情況下,由與 RAID10 磁碟非常可靠,訊息也不會丟(非同步刷盤丟失少量訊息,同步刷盤一條不丟)。效能最高。
缺點:單臺機器宕機期間,這臺機器上未被消費的訊息在機器恢復之前不可訂閱,訊息實時性會受到受到影響。
### 先啟動 NameServer,例如機器 IP 為:172.16.8.106:9876
1 |
|
### 在機器 A,啟動第一個 Master
1 |
|
### 在機器 B,啟動第二個 Master
1 |
|
3. 多 Master 多 Slave 模式,非同步複製
每個 Master 配置一個 Slave,有多對Master-Slave,HA 採用非同步複製方式,主備有短暫訊息延遲,毫秒級。
優點:即使磁碟損壞,訊息丟失的非常少,且訊息實時性不會受影響,因為 Master 宕機後,消費者仍然可以從 Slave 消費,此過程對應用透明。不需要人工干預。效能同多 Master 模式幾乎一樣。
缺點:Master 宕機,磁碟損壞情況,會丟失少量訊息。
### 先啟動 NameServer,例如機器 IP 為:172.16.8.106:9876
1 |
|
### 在機器 A,啟動第一個 Master
1 |
|
### 在機器 B,啟動第二個 Master
1 |
|
### 在機器 C,啟動第一個 Slave
1 |
|
### 在機器 D,啟動第二個 Slave
1 |
|
4. 多 Master 多 Slave 模式,同步雙寫
每個 Master 配置一個 Slave,有多對Master-Slave,HA 採用同步雙寫方式,主備都寫成功,嚮應用返回成功。
優點:資料與服務都無單點,Master宕機情況下,訊息無延遲,服務可用性與資料可用性都非常高
缺點:效能比非同步複製模式略低,大約低 10%左右,傳送單個訊息的 RT 會略高。目前主宕機後,備機不能自動切換為主機,後續會支援自動切換功能。
### 先啟動 NameServer,例如機器 IP 為:172.16.8.106:9876
1 |
|
### 在機器 A,啟動第一個 Master
1 |
|
### 在機器 B,啟動第二個 Master
1 |
|
### 在機器 C,啟動第一個 Slave
1 |
|
### 在機器 D,啟動第二個 Slave
1 |
|
以上 Broker 與 Slave 配對是通過指定相同的brokerName 引數來配對,Master 的 BrokerId 必須是 0,Slave的BrokerId 必須是大與 0 的數。另外一個 Master 下面可以掛載多個 Slave,同一 Master 下的多個 Slave 通過指定不同的 BrokerId 來區分。
五、安裝
1. 安裝
下載RocketMQ,在每個節點,解壓到指定目錄
alibaba-rocketmq-3.2.6.tar.gz
tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local
解壓後的資料夾:alibaba-rocketmq
進入bin目錄
注:RocketMQ需要jdk1.7及以上版本
2. 啟動NameServer
[[email protected] 2m-2s-sync]# nohup sh mqnamesrv &
[2] 17938
[[email protected] 2m-2s-sync]# nohup: ignoring input and appending output to `nohup.out'
檢視nohup.out檔案中:
The Name Server boot success.表示NameServer啟動成功
Jps檢視NameServer程序
3. 啟動BrokerServer a, BrokerServer b
在m106上啟動master A
[[email protected] bin]# nohup sh mqbroker -n 172.16.8.106:9876 -c ../conf/2m-noslave/broker-a.properties &
[1] 17206
在m107上啟動master B
[[email protected] bin]# nohup sh mqbroker -n 172.16.8.106:9876 -c ../conf/2m-noslave/broker-b.properties &
[1] 14488
Jps檢視服務啟動情況
[[email protected] bin]# jps
12494 HRegionServer
12240 Kafka
16556 DataNode
18499 NamesrvStartup
13101 RunJar
17210 BrokerStartup
4. 建立topic
[[email protected] bin]# sh mqadmin updateTopic
usage: mqadmin updateTopic [-b <arg>] [-c <arg>] [-h] [-n <arg>] [-o <arg>] [-p <arg>] [-r <arg>] [-s <arg>]
-t <arg> [-u <arg>] [-w <arg>]
-b,--brokerAddr <arg> create topic to which broker
-c,--clusterName <arg> create topic to which cluster
-h,--help Print help
-n,--namesrvAddr <arg> Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
-o,--order <arg> set topic's order(true|false
-p,--perm <arg> set topic's permission(2|4|6), intro[2:R; 4:W; 6:RW]
-r,--readQueueNums <arg> set read queue nums
-s,--hasUnitSub <arg> has unit sub (true|false
-t,--topic <arg> topic name
-u,--unit <arg> is unit topic (true|false
-w,--writeQueueNums <arg> set write queue nums
例項:
[[email protected] bin]# sh mqadmin updateTopic -n 172.16.8.106:9876 -c DefaultCluster -t TopicTest1
create topic to 172.16.8.107:10911 success.
TopicConfig [topicName=TopicTest1, readQueueNums=8, writeQueueNums=8, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false]
5. 刪除topic
[[email protected] bin]# sh mqadmin deleteTopic -n 172.16.8.106:9876 -c DefaultCluster -t TopicTest1
delete topic [TopicTest1] from cluster [DefaultCluster] success.
delete topic [TopicTest1] from NameServer success.
6. 檢視topic資訊
[[email protected] bin]# sh mqadmin topicList -n 172.16.8.106:9876
BenchmarkTest
TopicTest1
broker-a
DefaultCluster
7. 檢視topic統計資訊
[[email protected] bin]# sh mqadmin topicStatus -n 172.16.8.106:9876 -t TopicTest1
#Broker Name #QID #Min Offset #Max Offset #Last Updated
broker-a 0 0 0
broker-a 1 0 0
broker-a 2 0 0
broker-a 3 0 0
broker-a 4 0 0
broker-a 5 0 0
broker-a 6 0 0
broker-a 7 0 0
8. 檢視所有消費組group
[[email protected] bin]# sh mqadmin consumerProgress -n 172.16.8.106:9876
9. 檢視指定消費組下的所有topic資料堆積情況
[[email protected] bin]# sh mqadmin consumerProgress -n 172.16.8.106:9876 -g ConsumerGroupName
六、使用指南
1. 客戶端定址方式
l 在程式碼中指定NameServer地址
Producer.setNamesrvAddr(“192.168.8.106:9876”);
或
Consumer.setNamesrvAddr(“192.168.8.106:9876”);
l Java啟動引數中指定NameServer地址
-Drocketmq.namesrv.addr=192.168.8.106:9876
l 環境變數指定NameServer地址·
export NAMESRV_ADDR=192.168.8.106:9876
l http靜態伺服器定址
客戶端啟動後,會定時訪問一個靜態的HTTP伺服器,地址如下:
這個URL的返回內容如下:
192.168.8.106:9876
客戶端預設每隔2分鐘訪問一次這個HTTP伺服器,並更新本地的NameServer地址。URL已經在程式碼中寫死,可通過修改/etc/hosts檔案來改變要訪問的伺服器,例如在/etc/hosts增加如下配置:
10.232.22.67 jmenv.taobao.net
2. 客戶端的公共配置類:ClientConfig
引數名 |
預設值 |
說明 |
NamesrvAddr |
NameServer地址列表,多個nameServer地址用分號隔開 |
|
clientIP |
本機IP |
客戶端本機IP地址,某些機器會發生無法識別客戶端IP地址情況,需要應用在程式碼中強制指定 |
instanceName |
DEFAULT |
客戶端例項名稱,客戶端建立的多個Producer,Consumer實際是共用一個內部例項(這個例項包含網路連線,執行緒資源等) |
clientCallbackExecutorThreads |
4 |
通訊層非同步回撥執行緒數 |
pollNameServerInteval |
30000 |
輪訓Name Server 間隔時間,單位毫秒 |
heartbeatBrokerInterval |
30000 |
向Broker傳送心跳間隔時間,單位毫秒 |
persistConsumerOffsetInterval |
5000 |
持久化Consumer消費進度間隔時間,單位毫秒 |
3. Producer配置
引數名 |
預設值 |
說明 |
producerGroup |
DEFAULT_PRODUCER |
Producer組名,多個Producer如果屬於一個應用,傳送同樣的訊息,則應該將它們歸為同一組。 |
createTopicKey |
TBW102 |
在傳送訊息時,自動建立伺服器不存在的topic,需要指定key |
defaultTopicQueueNums |
4 |
在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數 |
sendMsgTimeout |
10000 |
傳送訊息超時時間,單位毫秒 |
compressMsgBodyOverHowmuch |
相關推薦RocketMQ簡介及安裝一、簡介 官方簡介: l RocketMQ是一款分散式、佇列模型的訊息中介軟體,具有以下特點: l 能夠保證嚴格的訊息順序 l 提供豐富的訊息拉取模式 l 高效的訂閱者水平擴充套件能力 l 實時的訊息訂閱機制 l 億級訊息堆積能力 二、網路架構 maven 之maven簡介及安裝分享 運行 項目信息 ava 信息 專家 not 編碼 bin 1. maven:行內,專家。基於java的項目構建功能,依賴管理,項目信息管理,Maven是一個項目構建工具。 2.構建:指日常開發中經常完成的除了編碼外的一些動作。如:清理,編譯,測試,運行,報告,部署等動 【轉】Nodejs學習筆記(一)--- 簡介及安裝Node.js開發環境ack 目錄 javascrip 難度 時間 網站開發 clas jetbrains 常用 目錄 學習資料 簡介 安裝Node.js npm簡介 開發工具 Sublime Node.js開發環境配置 擴展:安裝多版本管理器 學習資料 1.深入淺出Node.j linux簡介及安裝linux1.簡介 誕生於1991年10月5日 linux是類Unix操作系統,基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。 支持32位和64位硬件,繼承了Unix以網絡為核心的設計思想。 創始人:林納斯·托瓦茲(Linus Benedict Torvalds) 特點: Libcap的簡介及安裝pca apt-get 以太網 當前 upd 監控 提示 文件 wall Libpcap 簡介 libpcap 是unix/linux 平臺下的網絡數據包捕獲函數包, 大多數網絡監控軟件都以它為基礎。 Libpcap 可以在絕大多數類unix 平臺下工作. Li 國際版Azure搭建Windows多種類型VPN_一.簡介及安裝服務azure vpn 很多時候我們需要一個穩定安全而且多種類型的VPN,以下是本次實驗的拓撲圖,實現SSTP和L2TP VPN。SSTP需要證書SSL來實現,而L2TP則是通過密鑰共享來實現(此連接方法適合與移動設備,不過安全性不夠SSTP好)。一.Azure 創建虛擬機登錄國際版Azure:htt 大數據筆記(二十七)——Spark Core簡介及安裝配置sin cli sca follow com clu 同時 graphx 信息 1、Spark Core: 類似MapReduce 核心:RDD 2、Spark SQL: 類似Hive,支持SQL 3、Spark Streaming:類似 Sqoop簡介及安裝部署cdh5 ive not 簡介 ins one generate and lin 簡介: Apache Sqoop是專為Apache Hadoop和結構化數據存儲如關系數據庫之間的數據轉換工具的有效工具。你可以使用Sqoop從外部結構化數據存儲的數據導入到Hadoop分布 Apache Flume簡介及安裝部署display 根據 buffers type hello headers agent tran 結構圖 概述 Flume 是 Cloudera 提供的一個高可用的,高可靠的,分布式的海量日誌采集、聚合和傳輸的軟件。 Flume 的核心是把數據從數據源(source)收集 python簡介及安裝結構 特色 ofo $path .py 訪問 查看 二進制 程序開發 Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構 zookeeper簡介及安裝get image html 官網 進一步 ima enc 成員 nco 1. Zookeeper簡介 1.1 概念zookeeper是一個維護配置信息、命名、提供分布式同步的集中式服務(也就是說主要用於分布式應用程序中)。它是一個分布式的協調服務。集群中節點個數最少是 nginx高性能WEB服務器系列之一簡介及安裝簡單的 使用 line 都是 hash 設置 figure request cor 註:原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。 nginx的強大之處不必要我細說,當初第一次接觸nginx的時候就發現了它的強 資料實時監控平臺(二):Telegraf簡介及安裝接著上一篇部落格:InfluxDB簡介及安裝,這篇部落格介紹下Linux環境下Telegraf安裝以及其功能特點。。。 官網地址:influxdata 官方文件:telegraf文件 環境:CentOS7.4 64位 Telegraf版本:0.11.1-1 一、Tel 數據實時監控平臺(二):Telegraf簡介及安裝完成 成功 show user 官方文檔 targe 相關 erp tps 設計 接著上一篇博客:InfluxDB簡介及安裝,這篇博客介紹下Linux環境下Telegraf安裝以及其功能特點。。。 官網地址:influxdata 官方文檔:telegraf文檔 環境:C 視覺化工具Grafana:簡介及安裝隨著業務的越發複雜,對軟體系統的要求越來越高,這意味著我們需要隨時掌控系統的執行情況。因此,對系統的實時監控以及視覺化展示,就成了基礎架構的必須能力。 這篇部落格,介紹下開源的視覺化套件grafana的安裝及其功能特點。。。 官網地址:Grafana 官方文件:Grafana文件 環境 效能測試監控平臺:InfluxDB+Grafana+Jmeter linux環境執行jmeter並生成報告 時序資料庫InfluxDB:簡介及安裝 視覺化工具Grafana:簡介及安裝前面的部落格介紹了InfluxDB、Telegraf、Grafana的安裝和使用方法,這篇部落格,介紹下如何利用這些開源工具搭建效能測試監控平臺。。。 前言 效能測試工具jmeter自帶的監視器對效能測試結果的實時展示,在Windows系統下的GUI模式執行,渲染和效果不是太好,在linu RocketMq簡介及重要概念目錄 RocketMq簡介 RocketMq重要概念 單機RocketMq搭建 RocketMq總體結構 客戶端定址方式 RocketMq簡介 rocketmq是一個訊息中介軟體,基於Kafka的設計思想,但不是kafka的拷貝,它具有高吞吐量,高可用性,適用於大規模 Fiddler簡介及安裝和HTTPS的解決Fiddler簡介: 一個很強大的抓包工具,類似Charles 1.安裝: Filddler官網:點選開啟連結 我安裝的是filddler4:點選開啟連結 直接下載檔案,然後一路下一步就可以了 1.下載檔案: 2.安裝檔案一路下一步即可 3.安裝完成後開啟 第1講 ElasticSearch簡介及安裝ElasticSearch是一個基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩 Mycat的簡介及安裝Mycat簡介: 1.1Mycat含義 簡單的說,MyCAT就是: 一個徹底開源的,面向企業應用開發的“大資料庫叢集” 支援事務、ACID、可以替代Mysql的加強版資料庫 一個可以視為“Mysql”叢集的企業級資料庫,用來替代昂貴的Oracle叢集 一個融合記憶體快 |