1. 程式人生 > >RocketMQ學習筆記(1)----RocketMQ的簡介

RocketMQ學習筆記(1)----RocketMQ的簡介

1. 什麼是RecketMQ?

  

  

  是一個佇列模型的訊息中介軟體,具有高效能、高可靠、高實時、分散式特點。
  Producer、Consumer、佇列都可以分散式。
   Producer 吐一些佇列輪流収送訊息,佇列集合稱為Topic,Consumer 如果做廣播消費,則一個consumer
  例項消費返個Topic 對應的所有佇列,如果做叢集消費,則多個Consumer 例項平均消費返個topic 對應的
  佇列集合。
  能夠保證嚴格的訊息順序
  提供豐富的訊息拉叏模式
  高效的訂閱者水平擴充套件能力
  實時的訊息訂閱機制
  億級訊息堆積能力
  較少的依賴

  RocketMQ作為阿里巴巴的兩大分散式技術之一,是一款純java、分散式、佇列模型的開源訊息中介軟體,他參考了Java的JMS規範,但是它並沒有遵循JMS的規範,經歷了淘寶雙十一的洗禮,在功能和效能上據說是遠超ActiveMQ。

2. RocketMQ發展史

  1. Metaq(Metamorphsis) 1.x

   由開源社群killme2008維護,開源社群非常活躍。

   github地址:https://github.com/killme2008/Metamorphosis

  2. Metaq 2.x

   於2012年10月份上線,在淘寶內部被廣泛使用。

  3. RecoketMQ 3.x

  metaq 3.0釋出時,產品名稱改為RocketMQ。基於公司內部開源共建原則,RocketMQ專案只維護核心功能,且去除了所有其他執行時的依賴,核心功能最簡化。每個BU的個性化需求都在RocketMQ專案之上進行深度定製。RocketMQ向其他BU提供的僅僅是jar包,例如要定製一個Broker,那麼只需要依賴rocketmq-broker這個jar包即可,可通過API進行互動,如果定製client,則依賴rocketmq-client這個jar包,對其提供的api進行再封裝。

  開源社群地址:https://github.com/apache/RocketMQ

3. RecketMQ特性

  原生分散式

  要知道RocketMQ原生就是支援分散式的,而ActiveMQ原生存在單點性。

  嚴格訊息順序
  RocketMQ可以保證嚴格的訊息順序,而ActiveMQ無法保證!

  億級訊息堆積
  RocketMQ提供億級訊息的堆積能力,這不是重點,重點是堆積了億級的訊息後,依然保持寫入低延遲!

  兩種的訊息拉取模式(Push or Pull)。
  Push好理解,比如在消費者端設定Listener回撥;而Pull,控制權在於應用,即應用需要主動的呼叫拉訊息方法從Broker獲取訊息,這裡面存在一個消費位置記錄的問題(如果不記錄,會導致訊息重複消費)。

  特有的分散式協調器
  在Metaq1.x/2.x的版本中,分散式協調採用的是Zookeeper,而RocketMQ自己實現了一個NameServer,更加輕量級,效能好!

  組(Group)
  有了Producer/Consumer Group。
  ActiveMQ中並沒有Group這個概念,而在RocketMQ中理解Group的機制很重要。想過沒有,通過Group機制,讓RocketMQ天然的支援訊息負載均衡!比如某個Topic有9條訊息,其中一個Consumer Group有3個例項(3個程序 OR 3臺機器),那麼每個例項將均攤3條訊息!(注意RocketMQ只有一種模式,即釋出訂閱模式。)

  其他

  訊息失敗重試機制、高效的訂閱者水平擴充套件能力、強大的API、事務機制等等