消息系統kafka及其變種Jafka、Metamorphosis (MetaQ)
1、Kafka : 基于scala
kafka是一個發布訂閱的消息系統,關注于海量數據、性能和吞吐量,不關注可靠性和事務。
-------------------- 以下內容來自oschina的介紹
kafka是一種高吞吐量的分布式發布訂閱消息系統,她有如下特性:
-
通過O(1)的磁盤數據結構提供消息的持久化,這種結構對于即使數以TB的消息存儲也能夠保持長時間的穩定性能。
-
高吞吐量:即使是非常普通的硬件kafka也可以支持每秒數十萬的消息。
-
支持通過kafka服務器和消費機集群來分區消息。
-
支持Hadoop并行數據加載。
卡夫卡的目的是提供一個發布訂閱解決方案,它可以處理消費者規模的網站中的所有動作流數據。 這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像Hadoop的一樣的日志數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。kafka的目的是通過Hadoop的并行加載機制來統一線上和離線的消息處理,也是為了通過集群機來提供實時的消費。
2.Jafka : Kafka的java一直版本
Jafka 是一個高性能的跨語言分布式消息系統。Jafka已經開源,使用github托管。
Jafka是由Apache孵化的Kafka(由LinkedIn捐助給Apache)克隆而來。Jafka 1.0完整遵循Kafka 0.7的規范,幾乎是Kafka的克隆版(有一些改進和調整)。
Jafka有幾個吸引人的特性:
-
消息持久化非常快,服務端存儲消息的開銷為O(1),并且基于文件系統,能夠持久化TB級的消息而不損失性能
-
吞吐量很大,在我的筆記本DELL E6220、Fedora 16 x86_64下單CPU內核運行,使用Jafka內置的python客戶端,吞吐量能夠達到300k/s
-
完全的分布式系統,broker、producer、consumer都原生自動支持分布式。自動實現復雜均衡。
-
內核非常小,整個系統(包括服務端和客戶端)只有一個272KB的jar包,內部機制也不復雜,適合進行內嵌或者二次開發 。整個服務端加上依賴組件共3.5MB。
-
消息格式以及通信機制非常簡單,適合進行跨語言開發。目前自帶的Python 3.x的客戶端支持發送消息和接收消息。
Jafka的Java客戶端已經提交到 Maven中央倉庫。
3.Metamorphosis (MetaQ) : Kafka的java移植和改進版本
Metamorphosis (MetaQ) 是一個高性能、高可用、可擴展的分布式消息中間件,類似于LinkedIn的Kafka,具有消息存儲順序寫、吞吐量大和支持本地和XA事務等特性,適用于大吞吐量、順序消息、廣播和日志數據傳輸等場景,在淘寶和支付寶有著廣泛的應用,現已開源。
總體結構:
內部結構:
主要特點:
-
生產者、服務器和消費者都可分布
-
消息存儲順序寫
-
性能極高,吞吐量大
-
支持消息順序
-
支持本地和XA事務
-
客戶端pull,隨機讀,利用sendfile系統調用,zero-copy ,批量拉數據
-
支持消費端事務
-
支持消息廣播模式
-
支持異步發送消息
-
支持http協議
-
支持消息重試和recover
-
數據遷移、擴容對用戶透明
-
消費狀態保存在客戶端
-
支持同步和異步復制兩種HA
-
支持group commit
-
更多……