最火爆的開源流式系統Storm vs 新星Samza
分布計算系統框架,按照數據集的特點來說,主要分為data-flow和streaming兩種。data-flow主要是以數據塊為數據源來處理數據,代表有:MR、Spark等,我稱作它們為大數據,而streaming主要是處理單位內得到的數據,這種方式,更注重于實時性,主要包括Strom、JStorm和Samza等,我稱作它們為快數據。
在這篇文章中,我主要談論streaming相關的框架。
第一個是Storm,一個實時計算系統,它假定數據源是動態的,可以向流水一樣處理數據。
它的特點是:低延遲、高性能、分布式、可擴展和容錯性。
架構如下圖所示。
Storm的具體概念可以參照:http://blog.csdn.net/hljlzc2007/article/details/12976211,這里不做具體介紹。
Storm目前算是最最穩定的開源流式處理框架,但是個人認為它有兩個問題。
1. Storm雖然支持多個語言編寫spout和bolt端的代碼,但是它的主要技術實現是clojure,這給玩大數據、開源的朋友帶來了極大的不變,因為大家會的語言不是以java和C++等大眾語言為主,這樣的話,變得不可控了,難以深入了解、修改其細節。
2. Storm可以支持在Yarn(Hadoop 2.0)上,可以和其他開源框架共享Hadoop集群的資源,但是性能不佳,這個有待Storm改善
當然無論如何,Storm依然是目前開源流式處理框架的王者。
第二個我想說的是JStorm,這個是阿里做的,算是Storm的另一個實現,它用的語言是Java.
特點:
1. 客戶端的API與Storm基本上是一致的,如果從Storm遷移過來,不需要修改bolt和spout的代碼
2. Jstrom比Strom穩定,速度更快
3. 提供了一些新的特性
大家有興趣可以去玩玩,項目地址https://github.com/alibaba/jstorm
第三個是Samza
Samza是由LinkedIn開源的一個技術,它是一個開源的分布式流處理系統,非常類似于Storm。不同的是它運行在Hadoop之上,并且使用了自己開發的Kafka分布式消息處理系統。
這是Linkin開發的一個小而美的項目,如何美呢?
1. 只有幾千行代碼,完成的功能就可以和Storm媲美,當然目前還有很多的不足
2. 和Kafka結合緊密,更方便的處理數據
3. 運行在Yarn上
之前我做過的一個項目,是Kafka + Storm + ElasticSearch,將來完全可以將Storm替換成Samza,這樣的話,還可以利用Hadoop集群的資源,做一些存儲、離線分析的功能。將實時處理和離線分析都運行在Hadoop上,不得不說Samza是一個偉大的項目,這樣可以減少項目的增長復雜度,利于維護,還是那句話,小而美的東西,更受歡迎一些。
架構:
Samza主要包含三層,
1. 流處理層 --> Kafka
2. 執行層 --> YARN
3. 處理層 --> Samza API
Samza的流處理層和執行層都是可插拔式的,開發人員可以使用其他框架來替代,不局限于上述兩種技術。
Samza提供了一個YARN ApplicationMaster,和YARN job,運行在集群之外,下圖中不同顏色代表不同的主機。
Samza客戶端告訴YARN的Resouce Manager,它想啟動一個Samza job, YARN RM 告訴YARN Node manager,分配空間給YARN ApplicationMaster,NM指定完空間后,YARN container會運行Samza Task Runner。
Samza狀態管理
流式處理數據對狀態的管理是很難的,由于數據是流動的,本身沒有狀態,這樣就需要靠歷史數據來記錄應用的場合,Samza提供了一個內部的key-value數據庫,它是基于LevelDB,運行的JVM之外的,使用它來存儲歷史數據。這樣的做的好處是:
1. 減少JVM的開銷
2. 使用內部存儲,極大提高的吞吐率
3. 減少并發操作
Samza處理流程.
下圖是Samza官方給的一例子,根據Member ID分組,計算頁面訪問次數。入口消息分別來自Machine1、2,出口是Machine3,我們可以這樣理解,消息分散在不同的消息系統中(Kafka),Samza從不同的Kafka中讀取topic,在將topic進行處理后,發送到Machine3,這里不做過多分解,具體可以參照官方文檔。
項目地址:https://github.com/apache/incubator-samza
官方文件:http://samza.incubator.apache.org/
以上給了我們無限遐想,Storm是否會保持領先地位,Samza能否取而代之呢,無論如何,作為開發者來說,幾千行代碼,我都迫不及待去要讀一下了。
posted on 2014-12-02 15:03 paulwong 閱讀(421) 評論(0) 編輯 收藏 所屬分類: STORM