許多分布式計算系統都可以實時或接近實時地處理大資料流。本文將對三種apache框架分別進行簡單介紹,然後嘗試快速、高度概述其異同。
apache storm
在storm中,先要設計乙個用於實時計算的圖狀結構,我們稱之為拓撲(topology)。這個拓撲將會被提交給集群,由集群中的主控節點(master node)分發**,將任務分配給工作節點(workernode)執行。乙個拓撲中包括spout和bolt兩種角色,其中spout傳送訊息,負責將資料流以tuple元組的形式傳送出去;而bolt則負責**資料流,在bolt中可以完成計算、過濾等操作,bolt自身也可以隨機將資料傳送給其他bolt。在storm中,每個都是tuple是不可變陣列,對應著固定的鍵值對。
spark streaming是核心spark api的乙個擴充套件,它並不會像storm那樣一次乙個地處理資料流,而是在處理前按時間間隔預先將其切分為一段一段的批處理作業。spark針對持續性資料流的抽象稱為dstream(discretizedstream),乙個dstream是乙個微批處理(micro-batching)的rdd(彈性分布式資料集);而rdd則是一種分布式資料集,能夠以兩種方式並行運作,分別是任意函式和滑動視窗資料的轉換。
samza處理資料流時,會分別按次處理每條收到的訊息。samza的流單位既不是元組,也不是dstream,而是一條條訊息。在samza中,資料流被切分開來,每個部分都由一組唯讀訊息的有序數列構成,而這些訊息每條都有乙個特定的id(offset)。該系統還支援批處理,即逐次處理同乙個資料流分割槽的多條訊息。samza的執行與資料流模組都是可插拔式的,儘管samza的特色是依賴hadoop的yarn(另一種資源排程器)和apache kafka。
共同之處
以上三種實時計算系統都是開源的分布式系統,具有低延遲、可擴充套件和容錯性諸多優點,它們的共同特色在於:允許你在執行資料流**時,將任務分配到一系列具有容錯能力的計算機上並行執行。此外,它們都提供了簡單的api來簡化底層實現的複雜程度。
三種框架的術語名詞不同,但是其代表的概念十分相似:
對比圖
下面**總結了一些不同之處:
資料傳遞形式分為三大類:
最多一次(at-most-once):訊息可能會丟失,這通常是最不理想的結果。
最少一次(at-least-once):訊息可能會再次傳送(沒有丟失的情況,但是會產生冗餘)。在許多用例中已經足夠。
恰好一次(exactly-once):每條訊息都被傳送過一次且僅僅一次(沒有丟失,沒有冗餘)。這是最佳情況,儘管很難保證在所有用例中都實現。
另乙個方面是狀態管理:對狀態的儲存有不同的策略,spark streaming將資料寫入分布式檔案系統中(例如hdfs);samza使用嵌入式鍵值儲存;而在storm中,或者將狀態管理滾動至應用層面,或者使用更高層面的抽象trident。
用例
這三種框架在處理連續性的大量實時資料時的表現均出色而高效,那麼使用哪一種呢?選擇時並沒有什麼硬性規定,最多就是幾個指導方針。
如果你想要的是乙個允許增量計算的高速事件處理系統,storm會是最佳選擇。它可以應對你在客戶端等待結果的同時,進一步進行分布式計算的需求,使用開箱即用的分布式rpc(drpc)就可以了。最後但同樣重要的原因:storm使用apache thrift,你可以用任何程式語言來編寫拓撲結構。如果你需要狀態持續,同時/或者達到恰好一次的傳遞效果,應當看看更高層面的trdent api,它同時也提供了微批處理的方式。
說到微批處理,如果你必須有狀態的計算,恰好一次的遞送,並且不介意高延遲的話,那麼可以考慮spark streaming,特別如果你還計畫圖形操作、機器學習或者訪問sql的話,apache spark的stack允許你將一些library與資料流相結合(spark sql,mllib,graphx),它們會提供便捷的一體化程式設計模型。尤其是資料流演算法(例如:k均值流**)允許spark實時決策的促進。
結論
本文中我們只對這三種apache框架進行了簡單的了解,並未覆蓋到這些框架中大量的功能與更多細微的差異。同時,文中這三種框架對比也是受到限制的,因為這些框架都在一直不斷的發展,這一點是我們應當牢記的。
最後祝福所有遇到瓶頸的大資料程式設計師們突破自己,祝福大家在往後的工作與面試中一切順利。
對比分析元件邏輯復用的三種方案
一 復用元件邏輯的方案 1 通過高階元件hoc復用元件邏輯 import react from react 高階元件 const withmouse component handlemousemove event render onmousemove div return withmousecomp...
大資料 計算引擎之二 資料處理三種型別
在深入介紹不同實現的指標和結論之前,首先需要對不同處理型別的概念進行乙個簡單的介紹。批處理在大資料世界有著悠久的歷史。批處理主要操作大容量靜態資料集,並在計算過程完成後返回結果。批處理模式中使用的資料集通常符合下列特徵.流處理系統會對隨時進入系統的資料進行計算。相比批處理模式,這是一種截然不同的處理...
三種光網路佈線技術的優劣勢對比分析
光纖在各種光網路中的實際應用決定了對光纖技術效能的要求。對於短距離光傳輸網路,考慮的重點是適合雷射傳輸和模式頻寬更寬的多模光纖,以支援更大的序列訊號資訊傳輸容量。下面是當前三種網路技術的介紹 1 fddi cddi 光纖 銅線分布式資料介面 這是一種成熟的 非載波偵聽的 100m頻寬共享的網路技術。...