天天看點

消息隊列産品RabbitMQ、RocketMQ、Kafka的比較

1.RabbitMQ

   RabbitMQ用Erlang語言編寫,最早是為電信系統間的可靠通信設計的。

    優點:

   (1)輕量級,迅捷,容易部署和使用,是應用最廣泛的消息中間件之一。

   (2)靈活的路由配置。它在生産者和隊列之間增加了一個Exchange子產品,根據配置的路由規則将生産者發出的消息分發到不同的隊列中。

  (3)每秒可以處理幾萬到幾十萬條消息,可以支撐絕大多數場景。

   缺點:

 (1)大量消息堆積時,會導緻性能急劇下降。

 (2) 和其它兩種消息隊列産品相比,性能是最差的。是以,如果業務對性能要求特别高,就不要選用RabbitMQ。

 (3) Erlang程式設計語言比較小衆,學習成本高,不容易二次開發。

2.RocketMQ

   RocketMQ是阿裡巴巴2012年開源的産品,是優秀的國産消息隊列。

    優點:

 (1)中文社群活躍,源代碼易讀,友善二次開發。

 (2)每秒可以處理幾十萬條消息,性能比RabbitMQ高一個數量級。

 (3)對線上業務的響應時延做了很多優化,大多數情況下可以做到毫秒級響應。是以,如果業務很在意響應時延,就應該選用RocketMQ。

    缺點:

  (1)作為國産消息隊列,在國際上沒那麼流行,與周邊産品的內建和相容性略差。

3.Kafka

    最早由LinkedIn開發,最初設計的目的是處理海量日志。

    早期的版本為了擷取極緻的性能,在其它方面做了犧牲,如可靠性低,不支援叢集,功能也簡陋。但随後的版本已經補齊了這些短闆,在可靠性、穩定性和功能等方面已經可以滿足絕大部分場景的需求。

    優點:

 (1)與周邊産品的內建和相容性非常好。在大資料和流計算領域,幾乎所有的開源軟體都支援Kafka。

 (2)每秒可以處理幾十萬條消息,也比RabbitMQ高一個數量級。

    缺點:

 (1)設計上大量采用批量和異步的思想,擷取了超高性能。但是同步收發消息的響應時延比較高,不太适合處理線上業務場景。