你所理解的Kafka與RabbitMQ區別是什麼呢?

概述

在分佈式系統中,我們廣泛運用消息中間件進行系統間的數據交換,便於異步解耦。現在開源的消息中間件有很多,前段時間產品 RocketMQ (MetaQ的內核) 也順利開源。不過今天主要是對Kafka與RabbitMQ功能做個對比。


MQ簡介

MQ,Message queue,消息隊列,就是指保存消息的一個容器。具體的定義這裡就不類似於數據庫、緩存等,用來保存數據的。當然,與數據庫、緩存等產品比較,也有自己一些特點。

現在常用的MQ組件有ActiveMQ、RabbitMQ、RocketMQ、ZeroMQ、MetaMQ,當然近年來火熱的kafka,從某些場景來說,也是MQ,當然kafka的功能更加強大,雖然不同的MQ都有自己的特點和優勢,但是,不管是哪種MQ,都有MQ本身自帶的一些特點,下面,介紹MQ的特點。

MQ特點

1、先進先出

不能先進先出,都不能說是隊列了。消息隊列的順序在入隊的時候就基本已經確定了,一般是不需人工干預的。而且,最重要的是,數據是隻有一條數據在使用中。 這也是MQ在諸多場景被使用的原因。

2、發佈訂閱

發佈訂閱是一種很高效的處理方式,如果不發生阻塞,基本可以當做是同步操作。這種處理方式能非常有效的提升服務器利用率,這樣的應用場景非常廣泛。

3、持久化

持久化確保MQ的使用不只是一個部分場景的輔助工具,而是讓MQ能像數據庫一樣存儲核心的數據。

4、分佈式

在現在大流量、大數據的使用場景下,只支持單體應用的服務器軟件基本是無法使用的,支持分佈式的部署,才能被廣泛使用。而且,MQ的定位就是一個高性能的中間件。


Kafka和RabbitMQ

下面主要對常見的兩類消息產品(Kafka、RabbitMQ)做一下介紹。

1、Kafka

你所理解的Kafka與RabbitMQ區別是什麼呢?

Kafka是LinkedIn開源的分佈式發佈-訂閱消息系統,目前歸屬於Apache頂級項目。Kafka主要特點是基於Pull的模式來處理消息消費,追求高吞吐量,一開始的目的就是用於日誌收集和傳輸。0.8版本開始支持複製,不支持事務,對消息的重複、丟失、錯誤沒有嚴格要求,適合產生大量數據的互聯網服務的數據收集業務。

2、RabbitMQ

你所理解的Kafka與RabbitMQ區別是什麼呢?

RabbitMQ是使用Erlang語言開發的開源消息隊列系統,基於AMQP協議來實現。AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。AMQP協議更多用在企業系統內,對數據一致性、穩定性和可靠性要求很高的場景,對性能和吞吐量的要求還在其次。


區別

下表是對Kafka與RabbitMQ功能的總結性對比及補充說明

你所理解的Kafka與RabbitMQ區別是什麼呢?

你所理解的Kafka與RabbitMQ區別是什麼呢?


你所理解的Kafka與RabbitMQ區別是什麼呢?

Rabbitmq比kafka可靠,kafka更適合IO高吞吐的處理,比如ELK日誌收集

Kafka和RabbitMq一樣是通用意圖消息代理,他們都是以分佈式部署為目的。但是他們對消息語義模型的定義的假設是非常不同的。

a) 以下場景比較適合使用Kafka。如果有大量的事件(10萬以上/秒)、你需要以分區的,順序的,至少傳遞成功一次到混雜了在線和打包消費的消費者、希望能重讀消息、你能接受目前是有限的節點級別高可用就可以考慮kafka。

b) 以下場景比較適合使用RabbitMQ。如果是較少的事件(2萬以上/秒)並且需要通過複雜的路由邏輯去找到消費者、你希望消息傳遞是可靠的、並不關心消息傳遞的順序、而且需要現在就支持集群-節點級別的高可用就可以考慮rabbitmq。

後面會分享更多devops和DBA方面內容,感興趣的朋友可以關注下!

你所理解的Kafka與RabbitMQ區別是什麼呢?


分享到:


相關文章: