1.偏頭痛楊的rocketmq4.x入門之基礎概念掃盲篇
阿新 • • 發佈:2019-01-28
前戲閱讀本文之前,讀者必須自己清楚什麼是訊息佇列,以及訊息佇列的一些基本概念,例如:訊息、生產者、消費者等。我們如果需要玩非同步、分散式事務、程式碼物理解耦、削峰平谷、釋出訂閱等等,可以使用訊息佇列中介軟體,那麼阿里的rocketmq是一款比較中意的產品,既有開源版又有商業版(阿里雲的mq有點貴,誰用誰知道)。商業版與開源版的api不同,有的概念也不同。。。rocketmq的特點是純java編寫、高效能、高吞吐、分散式等等。目前捐贈給阿帕奇,正在被孵化中,有望成為國內的頂級阿帕奇專案之一,希望大家能支援國貨。rocketmq裡的概念比較多,坑也不少,有興趣的童鞋可以研究一下他的原始碼,都是java寫的。 一些大廠面試題也會問到。想要完全掌握這些理論還是需要系統學習的。專案的git站點:rocketmq的歷程:metaq1.x->metaq2.x->alibaba-rocketmq3.x->apache-rocketmq4.x
阿里雲商業版訊息佇列的優缺點:優點:1.省事,傻瓜式運維。2.省心,幾乎不出問題。缺點:1.如果業務量較小,那麼成本比較貴。2.訊息佇列伺服器時間不可控,會導致生產者&消費者伺服器與訊息佇列伺服器的時間不同,造成隱患。 感謝蠢新給予我的幫助與支援,在我最迷茫的時候(被rocketmq的坑卡住的時候)給我方向,非常感謝你。RocketMQ的特點 broker也儲存訊息相關的元資料,包括:消費者組、消費進度、topic&queue資訊等。broker是個邏輯概念,1個broker = 1個master + 0至n個slave,具有同1個broker name的master和slave進行配對。
服務啟動順序:name server->broker->producer&consumer每個broker與name server叢集中的所有節點建立長連線,定時註冊topic&broker的路由資訊到所有name server中。producer與name server叢集中的其中一個節點(隨機選擇)建立長連線,定期從name server獲取topic路由資訊,並向提供topic服務的broker master建立長連線,且定期向broker master傳送心跳,produce無狀態,可叢集部署。producer只能將訊息傳送到broker master,但是consumer則不一樣。consumer與name server叢集中的其中一個節點(隨機選擇)建立長連線,定期從name server獲取topic路由資訊,consumer同時與提供topic服務的master和slave建立長連線且定時傳送心跳,consumer既可以從broker master訂閱訊息,也可以從broker slave訂閱訊息,訂閱規則由broker配置決定。broker一旦需要橫向擴充套件,只需要啟動更多的broker即可,然後把對應的topic建上,客戶端的queue集合即會變大,並且由於每個group下面的topic的配置都是獨立的,也就說可以讓broker1下面的那個topic的queue數量是4,其他broker下的topic queue數量是2,這樣broker1則得到更大的負載。
rocketmq的組
相同組的例項組成了一個叢集,具有天然的訊息負載均衡及高效的水平擴充套件機制。例如:生產者生產了9條訊息,消費者組有3個消費者例項,那麼每個例項將均攤3條訊息!
訊息佇列產品對比rocketmq>kafka>activemq,整體上rocketmq還是佔優勢的。
總結主要掌握rocketmq的四大金剛以及互相的關係,此外一些核心概念例如:topic、queue、message也是重點,需要理解而不是死記硬背。
阿里雲商業版訊息佇列的優缺點:優點:1.省事,傻瓜式運維。2.省心,幾乎不出問題。缺點:1.如果業務量較小,那麼成本比較貴。2.訊息佇列伺服器時間不可控,會導致生產者&消費者伺服器與訊息佇列伺服器的時間不同,造成隱患。 感謝蠢新給予我的幫助與支援,在我最迷茫的時候(被rocketmq的坑卡住的時候)給我方向,非常感謝你。RocketMQ的特點
- 支援嚴格的訊息順序
- 億級訊息堆積能力(不考慮記憶體&磁碟等資源)
- 提供配置、指標和監控等功能豐富Dashboard
- 消費者同時支援Push與Pull方式消費訊息
- 歷經多次天貓雙十一海量訊息考驗
- 訊息失敗重試機制
- 訊息事務機制
- producer、consumer、broker、nameserver都可以玩分散式,叢集部署,消除單點故障。
- producer
- broker
- consumer
- name server
- topic(主題)
- message(訊息)
- tag(標籤)
- queue(佇列)
- offset(消費進度)
- commit log(儲存檔案)
服務啟動順序:name server->broker->producer&consumer每個broker與name server叢集中的所有節點建立長連線,定時註冊topic&broker的路由資訊到所有name server中。producer與name server叢集中的其中一個節點(隨機選擇)建立長連線,定期從name server獲取topic路由資訊,並向提供topic服務的broker master建立長連線,且定期向broker master傳送心跳,produce無狀態,可叢集部署。producer只能將訊息傳送到broker master,但是consumer則不一樣。consumer與name server叢集中的其中一個節點(隨機選擇)建立長連線,定期從name server獲取topic路由資訊,consumer同時與提供topic服務的master和slave建立長連線且定時傳送心跳,consumer既可以從broker master訂閱訊息,也可以從broker slave訂閱訊息,訂閱規則由broker配置決定。broker一旦需要橫向擴充套件,只需要啟動更多的broker即可,然後把對應的topic建上,客戶端的queue集合即會變大,並且由於每個group下面的topic的配置都是獨立的,也就說可以讓broker1下面的那個topic的queue數量是4,其他broker下的topic queue數量是2,這樣broker1則得到更大的負載。
rocketmq的組
相同組的例項組成了一個叢集,具有天然的訊息負載均衡及高效的水平擴充套件機制。例如:生產者生產了9條訊息,消費者組有3個消費者例項,那麼每個例項將均攤3條訊息!
- ConsumerGroup(訂閱組)
- ProducerGroup(生產組)
訊息佇列產品對比rocketmq>kafka>activemq,整體上rocketmq還是佔優勢的。
總結主要掌握rocketmq的四大金剛以及互相的關係,此外一些核心概念例如:topic、queue、message也是重點,需要理解而不是死記硬背。