java下載檔案內容為空,面試真題解析
ActiveMQ
我們先看ActiveMQ。其實一般早些的專案需要引入訊息中介軟體,都是使用的這個MQ,但是現在用的確實不多了,說白了就是有些過時了。我們去它的官網看一看,你會發現官網已經不活躍了,好久才會更新一次。
它的單機吞吐量是萬級,一些小的專案已經夠用了,但對於高併發的網際網路專案完全不夠看。
在高可用上,使用的主從架構的實現。
在訊息可靠性上,有較低的概率會丟失資料。
綜合以上,其實這個產品基本可以棄用掉了,我們完全可以使用RabbitMQ來代替它。
RabbitMQ
rabbitMQ出現後,國內大部分公司都從activeMQ切換到了rabbitMQ,基本代替了activeMQ的位置。它的社群還是很活躍的。
它的單機吞吐量也是萬級,對於需要支援特別高的併發的情況,它是無法擔當重任的。
在高可用上,它使用的是映象叢集模式,可以保證高可用。
在訊息可靠性上,它是可以保證資料不丟失的,這也是它的一大優點。
同時它也支援一些訊息中介軟體的高階功能,如:訊息重試、死信佇列等(後續文章會講到)。
但是,它的開發語言是erlang,國內很少有人精通erlang,所以導致無法閱讀原始碼。
對於大多數中小型公司,不需要面對技術上挑戰的情況,使用它還是比較合適的。而對於一些BAT大型網際網路公司,顯然它就不合適了。
RocketMQ
接下來我們來討論一下我比較喜歡的MQ-RocketMQ,它是阿里開源的訊息中介軟體,久經沙場,非常靠譜。
它支援高吞吐量,能達到10萬級,能承受網際網路專案高併發的挑戰。
在高可用上,它使用的是分散式架構,可以搭建大規模叢集,效能很高。
在訊息可靠性上,通過配置,可以保證資料的絕對不丟失,
同時它支援大量的高階功能,如:延遲訊息、事務訊息、訊息回溯、死信佇列等等(後續文章會單獨講解)。
它非常適合應用於java系統架構中,因為它使用java語言開發的,我們可以去閱讀原始碼瞭解更深的底層原理。
目前來看,它沒有什麼特別的缺點,可以支援高併發下的技術挑戰,可以基於它實現分散式事務,大型網際網路公司和中小型公司都可以選擇使用它來作為訊息中介軟體使用,如果我來做技術選型,我首選的中介軟體就是它。
Kafka
kafka的吞吐量被公認為中介軟體中的翹楚,單機可以支援十幾萬的併發,相當強悍。
在高可用上同樣支援分散式叢集部署。
在訊息可靠性上,如果保證非同步的效能,可能會出現訊息丟失的情況,因為它儲存訊息時是先存到磁碟緩衝區的,如果機器出現故障,緩衝區的資料是可能丟失的(後續文章會講到)。
它的功能非常的單一,就是訊息的接收與傳送,因此不適合應用於許多場景。
它在行業內主要應用於大資料領域,使用它進行使用者行為日誌的採集和計算,來實現比如“猜你喜歡”的功能。
所以,如果沒有大資料的需求,一般不會選擇它。
總結:繪上一張Kakfa架構思維大綱腦圖(xmind)
其實關於Kafka,能問的問題實在是太多了,扒了幾天,最終篩選出44問:基礎篇17問、進階篇15問、高階篇12問,個個直戳痛點,不知道如果你不著急看答案,又能答出幾個呢?
若是對Kafka的知識還回憶不起來,不妨先看我手繪的知識總結腦圖(xmind不能上傳,文章裡用的是圖片版)進行整體架構的梳理
梳理了知識,刷完了面試,如若你還想進一步的深入學習解讀kafka以及原始碼,那麼接下來的這份《手寫“kafka”》將會是個不錯的選擇。
-
Kafka入門
-
為什麼選擇Kafka
-
Kafka的安裝、管理和配置
-
Kafka的叢集
-
第一個Kafka程式
-
Kafka的生產者
-
Kafka的消費者
-
深入理解Kafka
-
可靠的資料傳遞
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka實戰之削峰填谷
-
資料管道和流式處理(瞭解即可)