一、Kafka和RabbitMQ在吞吐量的區別是什麼?面試
通常狀況下,RabbitMQ單機的吞吐率在萬級別以內,而Kafka單機則比RabbitMQ高出一兩個量級,能夠達到十萬級別,甚至能夠達到百萬級別。(/但吞吐率是受到硬件層面的限制的。好比網卡的寬帶,若是寬帶爲1gb,要達到百萬的吞吐量就至關於1gb / 8 / 100w = 134b,至關於每次的消息體大小不能超過13b,不然就不算是百萬的吞吐量了/)算法
這是RabbitMQ和Kafka在吞吐量之間的區別。網絡
二、Kafka和RabbitMQ在消息可靠性的區別是什麼?(/消息的可靠性:是指對消息不丟失的保障程度;消息的可用性:是指無端障運行時間的百分比,一般用幾個9來衡量。/)運維
使用消息中間件在傳輸消息的過程當中會致使消息的丟失,也就是可靠性是每一箇中間件都會面臨的問題;同時又會涉及到消息的可用性。異步
從微觀方面來講,分佈式系統結構是一致性協議理論的應用實現,對於消息中間件的可靠性和可用性吧區別的話能夠根據它們的一致性協議來看;分佈式
-Kafka採用的是相似PacificA的一致性協議,經過ISR (In-Sync-Replica) 來保證多副本之間的同步,而且支持強一致性語義(經過acks實現)。(/相似Pacific的一致性協議和ZAB都是基於實用主義,把 log replication日誌賦值 和 Leader election Leader選舉分開,而Paxos算法則是將兩個問題合在一塊兒想/)性能
-RabbitMQ則是經過鏡像環形隊列實現多副本以及強一致性語義。大數據
三、RabbitMQ和Kafka在擴展能力的區別是什麼?(可用性方面)優化
消息中間件的擴展能力是指可以加強其可用能力及範圍;插件
好比RabbitMQ能夠支持多種消息協議就是它擴展能力的一種體現,是RabbitMQ在其基礎上添加了一個插件來擴展實現的。
而Kafka在集羣部署上,例如LinkedIn實踐介紹中就說過有部署超過了千臺設備的Kafka集羣,這就是Kafka在擴展能力方面的體現。
四、應用場景
Kafka 設計之初是爲日誌處理而生,給人們留下了數據可靠性要求不要的不良印象,可是隨着版本的升級優化,其可靠性獲得極大的加強, 就目前而言,在金融支付領域使用 RabbitMQ 居多 。
而在日誌處理、大數據等方面 Kafka 使用居多。
業界內主要的 消息隊列中間(消息中間件)件經常使用的主要有:RabbitMQ、Kafka、ActiveMQ、RocketMQ、ZeroMQ等等。
分佈式系統:是由多臺計算機主機組成的一個集合,在用戶的角度看來是一臺單獨的主機上的一個分佈式系統;但不是說硬件層面的所有組成一個集合,只是涉及多臺計算機的部分硬件;它是基於網絡的基礎上創建的軟件系統。(個人第一句話能夠類比進行理解:例如阿里巴巴的分佈式系統是由多臺(十幾萬臺)計算機組成的,在咱們的角度看來它好像就只是一臺巨大的主機,其實它是由多個主機組成的。第二句話類比理解:這些計算機組成了分佈式系統但不是所有都只能進行對系統方面進行運轉,它們能夠用在其餘方面例如存儲其餘的數據等。第三句類比理解:十幾萬臺計算機是創建在網絡上的軟件系統,經過網絡通訊和鏈接組成一個龐大軟件系統來對龐大的用戶提供服務)
消息中間件是指:利用高效可靠的消息傳遞機制進行與平臺無關的數據交流,並基於數據通訊來進行分佈式系統的集成。經過提供消息傳遞和消息排隊模型,它能夠在分佈式的環境下提供應用解耦、異步通訊、流量削峯等等。
RabbitMQ是什麼?——RabbitMQ是一個消息隊列,主要做用是解耦、異步、削峯、消息分發等等。是一個消息中間件。
Kafka是什麼?——是基於Zookeeper協調的一個分佈式消息系統,是一個高吞吐量的分佈式發佈和訂閱消息系統,以水平擴展和高吞吐率而被普遍使用。
對消息中間件能夠從多個方面進行比較,功能維度(同時又分爲多個子維度)、性能維度(有時候比功能維度更加劇要)、可靠性+可用性、運維管理、社區力度及生態發展。
面試的時候回答性能、可靠可用性、重量級便可。重量級是什麼?