轉(zhuǎn)載自:https://my.oschina.net/u/2326085/blog/391336
分布計算系統(tǒng)框架绰疤,按照數(shù)據(jù)集的特點來說侧馅,主要分為data-flow和streaming兩種扭屁。data-flow主要是以數(shù)據(jù)塊為數(shù)據(jù)源來處理數(shù)據(jù)握玛,代表有:MR、Spark等疹吃,我稱作它們?yōu)榇髷?shù)據(jù)蕉毯,而streaming主要是處理單位內(nèi)得到的數(shù)據(jù)乓搬,這種方式,更注重于實時性代虾,主要包括Strom进肯、JStorm和Samza等,我稱作它們?yōu)榭鞌?shù)據(jù)棉磨。
在這篇文章中江掩,我主要談論streaming相關(guān)的框架。
第一個是Storm乘瓤,一個實時計算系統(tǒng)环形,它假定數(shù)據(jù)源是動態(tài)的,可以向流水一樣處理數(shù)據(jù)衙傀。
它的特點是:低延遲抬吟、高性能、分布式统抬、可擴展和容錯性火本。
架構(gòu)如下圖所示。
Storm的具體概念可以參照:http://blog.csdn.net/hljlzc2007/article/details/12976211聪建,這里不做具體介紹钙畔。
Storm目前算是最最穩(wěn)定的開源流式處理框架,但是個人認為它有兩個問題金麸。
Storm雖然支持多個語言編寫spout和bolt端的代碼擎析,但是它的主要技術(shù)實現(xiàn)是clojure,這給玩大數(shù)據(jù)钱骂、開源的朋友帶來了極大的不變叔锐,因為大家會的語言不是以java和C++等大眾語言為主挪鹏,這樣的話见秽,變得不可控了,難以深入了解讨盒、修改其細節(jié)解取。
Storm可以支持在Yarn(Hadoop 2.0)上,可以和其他開源框架共享Hadoop集群的資源返顺,但是性能不佳禀苦,這個有待Storm改善
當然無論如何蔓肯,Storm依然是目前開源流式處理框架的王者。
第二個我想說的是JStorm振乏,這個是阿里做的蔗包,算是Storm的另一個實現(xiàn),它用的語言是Java.
特點:
客戶端的API與Storm基本上是一致的慧邮,如果從Storm遷移過來调限,不需要修改bolt和spout的代碼
Jstrom比Strom穩(wěn)定,速度更快
提供了一些新的特性
大家有興趣可以去玩玩误澳,項目地址https://github.com/alibaba/jstorm
第三個是Samza
Samza是由LinkedIn開源的一個技術(shù)耻矮,它是一個開源的分布式流處理系統(tǒng),非常類似于Storm忆谓。不同的是它運行在Hadoop之上裆装,并且使用了自己開發(fā)的Kafka分布式消息處理系統(tǒng)。
這是Linkin開發(fā)的一個小而美的項目倡缠,如何美呢哨免?
只有幾千行代碼,完成的功能就可以和Storm媲美昙沦,當然目前還有很多的不足
和Kafka結(jié)合緊密铁瞒,更方便的處理數(shù)據(jù)
運行在Yarn上
之前我做過的一個項目,是Kafka + Storm + ElasticSearch桅滋,將來完全可以將Storm替換成Samza慧耍,這樣的話,還可以利用Hadoop集群的資源丐谋,做一些存儲芍碧、離線分析的功能。將實時處理和離線分析都運行在Hadoop上号俐,不得不說Samza是一個偉大的項目泌豆,這樣可以減少項目的增長復雜度,利于維護吏饿,還是那句話踪危,小而美的東西,更受歡迎一些猪落。
架構(gòu):
Samza主要包含三層贞远,
流處理層 --> Kafka
執(zhí)行層 --> YARN
處理層 --> Samza API
Samza的流處理層和執(zhí)行層都是可插拔式的,開發(fā)人員可以使用其他框架來替代笨忌,不局限于上述兩種技術(shù)蓝仲。
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狀態(tài)管理
流式處理數(shù)據(jù)對狀態(tài)的管理是很難的亮钦,由于數(shù)據(jù)是流動的,本身沒有狀態(tài)噪漾,這樣就需要靠歷史數(shù)據(jù)來記錄應用的場合硼砰,Samza提供了一個內(nèi)部的key-value數(shù)據(jù)庫,它是基于LevelDB欣硼,運行的JVM之外的题翰,使用它來存儲歷史數(shù)據(jù)。這樣的做的好處是:
減少JVM的開銷
使用內(nèi)部存儲诈胜,極大提高的吞吐率
減少并發(fā)操作
Samza處理流程.
下圖是Samza官方給的一例子豹障,根據(jù)Member ID分組,計算頁面訪問次數(shù)焦匈。入口消息分別來自Machine1血公、2,出口是Machine3缓熟,我們可以這樣理解累魔,消息分散在不同的消息系統(tǒng)中(Kafka),Samza從不同的Kafka中讀取topic够滑,在將topic進行處理后垦写,發(fā)送到Machine3,這里不做過多分解彰触,具體可以參照官方文檔梯投。
項目地址:https://github.com/apache/incubator-samza
官方文件:http://samza.incubator.apache.org/
以上給了我們無限遐想,Storm是否會保持領先地位况毅,Samza能否取而代之呢分蓖,無論如何,作為開發(fā)者來說尔许,幾千行代碼么鹤,我都迫不及待去要讀一下了。