RabbitMQ/RocketMQ/Kafka 單機架構的對比

RabbitMQ

1.在RabbitMQ中,生產者通過與Broker連接並且建立信道(Channel),將消息發送至交換器(Exchange)。然後根據Exchange 的類型,將消息路由到指定隊列。

2.消費者通過與Broker連接並且建立信道(Channel),消費隊列消息。

3.關鍵字

   channel: 信道,一個連接內的邏輯區分。

   routeKey: 路由key 與 bindKey 相對應

   Exchange: 可以視爲一個名稱與隊列綁定的列表

   Queue: 隊列

4.在RabbitMQ中,一個隊列就包含了所有的消息。

RocketMQ

1.在RocketMQ中,創建Topic是需要指定名稱和隊列的數量(默認4個隊列)。當生成者發佈消息到broker時,客戶端會根據指定策略,將消息發送的指定隊列。Broker收到消息之後,會將消息寫入commitLog & consumeQueue,並根據刷盤策略落地。

2.消費者會根據指定策略,被分配的不同的隊列中進行消費(一個隊列只能被同一個消費組中的一個消費者消費),並在消費完成後提交消費位移。

3.這裏關鍵字是

    Topic:主題

    Queue:隊列

    消費位移

4.在RocketMQ中,所有隊列的並集就是消息總和。

Kafka

1.在Kafka中,創建Topic是需要指定名稱和分區的數量。當生成者發佈消息到broker時,客戶端會根據指定策略,將消息發送的指定分區。Broker收到消息之後,會將消息寫入.log & .index & .timeIndex ,並根據刷盤策略落地。

2.消費者會根據指定策略,被分配的不同的分區中進行消費(一個分區只能被同一個消費組中的一個消費者消費),並在消費完成後提交消費位移。

3.這裏關鍵字是

   Topic:主題

   Partition:分區

   消費位移

4.在Kafka中,所有分區的並集就是消息總和。

總結

1.RabbitMQ 、RocketMQ 和 Kafka 在存儲消息的模式存在區別。RabbitMQ是典型的內存式堆積(不是絕對的,當內存不足時,會出現換頁現象),而 RocketMQ 與 Kafka 是磁盤式堆積。一般情況下磁盤的空間都遠大於內存,所有相對而言,RocketMQ 和 Kafka 的消息堆積能力更強。

2.概念的區分。    

   RabbitMQ: Exchange、Queue    

   RocketMQ: Topic、MessageQueue    

   Kafka: Topic、Partition

3.數據集合    

   RabbitMQ 每個隊列擁有全部數據    

   RocketMQ 隊列的並集爲全部數據    

   Kafka 分區的並集爲全部數據

4.日誌存儲的區別    

    RabbitMQ 消息存儲在內存    

    RocketMQ 消息存儲在一個日誌文件,相應隊列只存儲對應的消息偏移量    

     Kafka  消息分佈存儲在不同的分區,每個分區包含日誌文件,偏移量文件及時間偏移量文件。

參考

1.狸貓技術窩 RocketMQ系列

2.《深入理解Kafka:核心設計與實踐原理》

3.《RabbitMQ實戰》

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章