一、RabbitMQ
RabbitMQ屬於比較傳統的消息隊列系統,支持標准的消息隊列協議(AMQP, STOMP,MQTT等),如果你的應用程序需要支持這些協議,那么還是使用RabbitMQ。另外RabbitMQ支持比較復雜的consumer Routing,這點也是Kafka不提供的。
廣泛用於金融保險、政企、電商、新零售、物流、視頻互動、能源等行業業務的消息通訊。
二、Kafka
廣泛用於日志收集、監控數據聚合、網站行為分析、流式數據處理、在線和離線分析等大數據領域,是大數據生態中不可或缺的產品之一;讓數據集成變得簡單:您能將 Kafka 中的消息導入到 ODPS、HBase、HBASE 等離線數據倉庫;可廣泛的與流計算引擎集成,包括阿里雲平台的 StreamCompute、E-MapReduce 和開源產品 Spark、Storm 等。
經典應用場景:
1、網站活動跟蹤
成功的網站運營都會非常關注站點的用戶行為並進行分析。通過消息隊列 Kafka,您可以實時收集網站活動數據(包括用戶瀏覽頁面、搜索及其他行為等),並通過“發布/訂閱”模型實現:
- 根據不同的業務數據類型,將消息發布到不同的 Topic;
- 通過訂閱消息的實時投遞,將消息流用於實時監控與業務分析或者加載到 Hadoop、ODPS 等離線數據倉庫系統進行離線處理與業務報告。
2、日志聚合
許多公司,比如淘寶、天貓平台每天都會產生大量的日志(一般為流式數據,如搜索引擎 pv、查詢等),相較於日志為中心的系統,比如 Scribe 或者 Flume 來說,Kafka 在提供同樣高效的性能時,可以實現更強的數據持久化以及更低的端到端響應時間。Kafka 的這種特性決定它非常適合作為日志收集中心:
- Kafka 忽略掉文件的細節,可以將多台主機或應用的日志數據抽象成一個個日志或事件的消息流,異步發送到 Kafka 集群,從而做到非常低的 RT 時間;
- Kafka 客戶端可批量提交消息和壓縮消息,對生產者而言幾乎感覺不到性能的開支;
- 消費者可以使用 Hadoop、ODPS 等離線倉庫存儲和 Strom、Spark 等實時在線分析系統對日志進行統計分析;
- 應用與分析解耦:構建應用系統和分析系統的橋梁,並將它們之間的關聯解耦。
3、流計算處理
在很多領域,如股市走向分析、氣象數據測控、網站用戶行為分析,由於數據產生快、實時性強且量大,您很難統一采集這些數據並將其入庫存儲后再做處理,這便導致傳統的數據處理架構不能滿足需求。
與傳統架構不同,Kafka 以及 Storm/Samza/Spark 等流計算引擎的出現,就是為了更好地解決這類數據在處理過程中遇到的問題,流計算模型能實現在數據流動的過程中對數據進行實時地捕捉和處理,並根據業務需求進行計算分析,最終把結果保存或者分發給需要的組件。
4、數據中轉樞紐
近 10 多年來,諸如 KV 存儲(HBase)、搜索(ElasticSearch)、流式處理(Storm/Spark Streaming/Samza)、時序數據庫(OpenTSDB)等專用系統應運而生。這些系統是因為單一的目標而產生,也因其簡單性使得在商業硬件上構建分布式系統變得更加容易且性價比更高。
通常,同一份數據集需要被注入到多個專用系統內。例如,當應用日志用於離線日志分析,搜索單個日志記錄同樣不可或缺,而構建各自獨立的工作流來采集每種類型的數據再導入到各自的專用系統顯然不切實際,利用 Kafka 作為數據中轉樞紐,同份數據可以被導入到不同專用系統中。
三、Redis
四、ActiveMQ