RabbitMQ/RocketMQ/Kafka 如何提高消費速度

RabbitMQ

1.RabbitMQ 無法向Kafka or RocketMQ 一樣提高並行速度。

2.RabbitMQ中,一個Queue 可以被多個消費者同時消費。所以可以增加消費者的數量來提高消費速度。

3.那麼如何提高單個消費者的處理速度?我們可以通過設置每次拉取消息的條數來減少網絡傳輸,通過批量ACK,可以減少ACK的次數,減少網絡開銷,從而提高消費速度。

4.但是通過Prefetch count之後,可以減少網絡傳輸,但消費速度則限制在了consumer的處理速度上,畢竟consumer還是得順序消費掉這些消息。這時候,我們可以通過java線程或者go協程來併發的處理消息。

RocketMQ&Kafka

1.對應RocketMQ 於 Kafka來說,同一隊列(RocketMQ) 或者 一個 分區(Kafka) 只能被一個消費者消費,所以當消費者數量超過隊列總數或者分區總數時,多餘的消費者是空閒的,爲了提高並行速度可以通過增加隊列數量或者分區數量。

2.RocketMQ & Kafka 和RabbitMQ 一樣,都提供批量拉取消息和批量Ack的能力,可以參考RabbitMQ的處理方式。

 

總結

1.RabbitMQ 與 RocketMQ/Kafka 的消費方式是不同的, RabbitMQ可以被多個消費者同時消費,但是RockeMQ和Kafka每個隊列或分區只能被一個消費者消費,所以要提高者兩者的消費速度,只能通過增加分區或隊列數。

2.三種都提供了批量拉取和批量ACK的功能,都是提高速率不錯的方法,但需要考慮消息的丟失問題。

3.批量拉取消息的時候,消費速度限制在單個消費者身上,這時候可以通過多線程或者協程提高消費速度。

參考

1.狸貓技術窩 RocketMQ系列

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

3.《RabbitMQ實戰》

4.https://www.cnblogs.com/bossma/p/practices-on-improving-the-speed-of-rabbitmq-consumption.html

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