關於面試 | 消息隊列帶來的問題

原文鏈接:https://doocs.github.io/advanced-java/#/docs/high-concurrency/why-mq

640?wx_fmt=jpeg

作者:Doocs 開源社區

消息隊列有什麼優缺點

優點在上篇文章已經說過了,在特殊場景下有其對應的好處:解耦、異步、削峯

缺點有以下幾個:

  • 系統可用性降低

  • 系統複雜度提高

  • 一致性問題

所以消息隊列實際是一種非常複雜的架構,你引入它有很多好處,但是也得針對它帶來的壞處做各種額外的技術方案和架構來規避掉,做好之後,你會發現,媽呀,系統複雜度提升了一個數量級,也許是複雜了 10 倍。但是關鍵時刻,用,還是得用的。

Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什麼優缺點?

特性ActiveMQRabbitMQRocketMQKafka
單機吞吐量萬級,比 RocketMQ、Kafka 低一個數量級同 ActiveMQ10 萬級,支撐高吞吐10 萬級,高吞吐,一般配合大數據類的系統來進行實時數據計算、日誌採集等場景
topic 數量對吞吐量的影響

topic 可以達到幾百/幾千的級別,吞吐量會有較小幅度的下降,這是 RocketMQ 的一大優勢,在同等機器下,可以支撐大量的 topictopic 從幾十到幾百個時候,吞吐量會大幅度下降,在同等機器下,Kafka 儘量保證 topic 數量不要過多,如果要支撐大規模的 topic,需要增加更多的機器資源
時效性ms 級微秒級,這是 RabbitMQ 的一大特點,延遲最低ms 級延遲在 ms 級以內
可用性高,基於主從架構實現高可用同 ActiveMQ非常高,分佈式架構非常高,分佈式,一個數據多個副本,少數機器宕機,不會丟失數據,不會導致不可用
消息可靠性有較低的概率丟失數據基本不丟經過參數優化配置,可以做到 0 丟失同 RocketMQ
功能支持MQ 領域的功能極其完備基於 erlang 開發,併發能力很強,性能極好,延時很低MQ 功能較爲完善,還是分佈式的,擴展性好功能較爲簡單,主要支持簡單的 MQ 功能,在大數據領域的實時計算以及日誌採集被大規模使用

綜上,各種對比之後,有如下建議:

一般的業務系統要引入 MQ,最早大家都用 ActiveMQ,但是現在確實大家用的不多了,沒經過大規模吞吐量場景的驗證,社區也不是很活躍,所以大家還是算了吧,我個人不推薦用這個了;

後來大家開始用 RabbitMQ,但是確實 Erlang 語言阻止了大量的 Java 工程師去深入研究和掌控它,對公司而言,幾乎處於不可控的狀態,但是確實人家是開源的,比較穩定的支持,活躍度也高;

不過現在確實越來越多的公司會去用 RocketMQ,確實很不錯,畢竟是阿里出品,但社區可能有突然黃掉的風險(目前 RocketMQ 已捐給 Apache,但 GitHub 上的活躍度其實不算高)對自己公司技術實力有絕對自信的,推薦用 RocketMQ,否則回去老老實實用 RabbitMQ 吧,人家有活躍的開源社區,絕對不會黃。

所以中小型公司,技術實力較爲一般,技術挑戰不是特別高,用 RabbitMQ 是不錯的選擇;大型公司,基礎架構研發實力較強,用 RocketMQ 是很好的選擇。

如果是大數據領域的實時計算、日誌採集等場景,用 Kafka 是業內標準的,絕對沒問題,社區活躍度很高,絕對不會黃,何況幾乎是全世界這個領域的事實性規範。

噹噹網羊毛還可以薅福利又送上

640?wx_fmt=jpeg

推薦閱讀

讀書 | 可複製的領導力(內含思維導圖)

『電影』遺願清單

『電影』美麗人生

『電影』追夢赤子心

吃個快餐都能學到串行,並行,併發

後臺回覆『設計模式』可以獲取《一故事一設計模式》電子書

覺得文章有用幫忙轉發&在看,多謝朋友們!

640?wx_fmt=jpeg

LieBrother

生活不止代碼,還有詩和遠方!沒時間解釋了,快長按左邊二維碼關注我們~

動力來源

640?wx_fmt=gif

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