聲明:本文非EamonSec原創,copy自網上下載的某個個文件sql
RocketMQ 是一款分佈式、隊列模型的消息中間件,具備如下特色:vim
選用理由:服務器
主題Tpoic:第一級消息類型,書的標題異步
標籤Tags:第二級消息類型,書的目錄,能夠基於Tag作消息過濾分佈式
例如:性能
主題:spa
訂單交易線程
標籤:code
訂單交易-建立server
訂單交易-付款
訂單交易-完成
生產組:用於消息的發送。
消費組:用於消息的訂閱處理。
生產組和消費組,方便擴縮機器,增減處理能力,集羣組的名字,用於標記用
途中的一員。每次只會隨機的發給每一個集羣中的一員。
推薦的幾種 Broker 集羣部署方式,這裏的Slave 不可寫,但可讀,相似於 Mysql
主備方式。
這種方式風險較大,一旦Broker
重啓或者宕機時,會致使整個服務不可用,不建議線上環境使用。
一個集羣無 Slave,全是 Master,例如 2 個 Master 或者 3 個 Master
優勢:配置簡單,單個Master 宕機或重啓維護對應用無影響,在磁盤配置爲
RAID10 時,即便機器宕機不可恢復狀況下,由與 RAID10
磁盤很是可靠,消息也不會丟(異步刷盤丟失少許消息,同步刷盤一條不丟)
。性能最高。
缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復以前不可訂
閱,消息實時性會受到受到影響。
先啓動 NameServer
在機器 A,啓動第一個 Master
在機器 B,啓動第二個 Master
每一個 Master 配置一個 Slave,有多對Master-Slave,HA
採用異步複製方式,主備有短暫消息延遲,毫秒級。
優勢:即便磁盤損壞,消息丟失的很是少,且消息實時性不會受影響,由於
Master 宕機後,消費者仍然能夠從 Slave
消費,此過程對應用透明。不須要人工干預。性能同多 Master 模式幾乎同樣。
缺點:Master 宕機,磁盤損壞狀況,會丟失少許消息。
先啓動 NameServer
在機器 A,啓動第一個 Master
在機器 B,啓動第二個 Master
在機器 C,啓動第一個 Slave
在機器 D,啓動第二個 Slave
每一個 Master 配置一個 Slave,有多對Master-Slave,HA
採用同步雙寫方式,主備都寫成功,嚮應用返回成功。
優勢:數據與服務都無單點,Master宕機狀況下,消息無延遲,服務可用性與
數據可用性都很是高
缺點:性能比異步複製模式略低,大約低 10%左右,發送單個消息的 RT
會略高。目前主宕機後,備機不能自動切換爲主機,後續會支持自動切換功能
。
先啓動 NameServer
在機器 A,啓動第一個 Master
在機器 B,啓動第二個 Master
在機器 C,啓動第一個 Slave
在機器 D,啓動第二個 Slave
以上 Broker 與 Slave 配對是經過指定相同的brokerName 參數來配對,Master
的 BrokerId 必須是 0,Slave 的BrokerId 必須是大與 0 的數。另一個 Master
下面能夠掛載多個 Slave,同一 Master 下的多個 Slave經過指定不一樣的 BrokerId
來區分。
上傳alibaba-rocketmq-3.2.6.tar.gz文件至/usr/local
tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local
mv alibaba-rocketmq alibaba-rocketmq-3.2.6
ln -s alibaba-rocketmq-3.2.6 rocketmq
ll /usr/local
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index
vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties
#所屬集羣名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不一樣的配置文件填寫的不同 brokerName=broker-a|broker-b #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=ASYNC_MASTER #刷盤方式 #- ASYNC_FLUSH 異步刷盤 #- SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false 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=ASYNC_MASTER #刷盤方式 #- ASYNC_FLUSH 異步刷盤 #- SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #發消息線程池數量 #sendMessageThreadPoolNums=128 #拉消息線程池數量 #pullMessageThreadPoolNums=128
# vim /usr/local/rocketmq/bin/runbroker.sh
#============================================================ ================== # 開發環境JVM Configuration #============================================================ ================== JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"
# vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m"
# cd /usr/local/rocketmq/bin
# nohup sh mqnamesrv &
# cd /usr/local/rocketmq/bin # nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 & # netstat -ntlp # jps # tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log # tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
# cd /usr/local/rocketmq/bin # nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 & # netstat -ntlp # jps # tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log # tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
# cd /usr/local/rocketmq/bin # sh mqshutdown broker # sh mqshutdown namesrv # --等待中止 # rm -rf /usr/local/rocketmq/store # mkdir /usr/local/rocketmq/store # mkdir /usr/local/rocketmq/store/commitlog # mkdir /usr/local/rocketmq/store/consumequeue # mkdir /usr/local/rocketmq/store/index # --按照上面步驟重啓NameServer與BrokerServer