flink和spark的區別

2021-10-12 16:16:53 字數 1200 閱讀 6363

1、spark無狀態,flink有狀態

spark本身是無狀態的,所以我們可以把它看成乙個rdd乙個運算元乙個rdd的去處理,就是說可以看成分段處理。

但是flink是事件驅動型應用是一類具有狀態的應用,我們要把它看成乙個個event記錄去處理,當遇到視窗時會進行阻塞等待,視窗的聚合操作是無狀態的。過了視窗後datastream的運算元聚合操作就是有狀態的操作了,所以flink要把聚合操作都放到視窗操作之前,才能進行無狀態的聚合操作。而spark全程都是無狀態的,所以在哪聚合都可以。

2、視窗的概念

window將乙個無限的stream拆分成有限大小的「buckets」桶,我們可以在這些桶上做計算操作。當該window有資料是運算元會執行,當window沒資料時運算元不執行。

3、watermark概念

每個event都帶有eventtime。watermark就等於當前所有到達資料中的maxeventtime - 延遲時長。一旦資料攜帶的watermark比當前未觸發的視窗的停止時間要晚,那麼就會觸發相應視窗的執行。

批處理的特點是有界、持久、大量,非常適合需要訪問全套記錄才能完成的計算工作,一般用於離線統計。

流處理的特點是無界、實時,無需針對整個資料集執行操作,而是對通過系統傳輸的每個資料項執行操作,一般用於實時統計。

在spark的世界觀中,一切都是由批次組成的,離線資料是乙個大批次,而實時資料是由乙個乙個無限的小批次組成的。

而在flink的世界觀中,一切都是由流組成的,離線資料是有界限的流,實時資料是乙個沒有界限的流,這就是所謂的有界流和無界流。

無界資料流無界資料流有乙個開始但是沒有結束,它們不會在生成時終止並提供資料,必須連續處理無界流,也就是說必須在獲取後立即處理event。對於無界資料流我們無法等待所有資料都到達,因為輸入是無界的,並且在任何時間點都不會完成。處理無界資料通常要求以特定順序(例如事件發生的順序)獲取event,以便能夠推斷結果完整性。

有界資料流有界資料流有明確定義的開始和結束,可以在執行任何計算之前通過獲取所有資料來處理有界流,處理有界流不需要有序獲取,因為可以始終對有界資料集進行排序,有界流的處理也稱為批處理。

Flink和spark的對比

兩者最重要的區別 流和微批 micro batching計算模式認為 流是批的特例 流計算就是將連續不斷的微批進行持續計算,如果批足夠小那麼就有足夠小的延時,在一定程度上滿足了99 的實時計算場景。那麼那1 為啥做不到呢?這就是架構的魅力,在micro batching模式的架構實現上就有乙個自然流...

Spark與Flink的對比

為了理解spark和flink引擎的特性,首先必須檢查它們各自的資料模型。spark使用彈性分布式資料集 resilient distributed dataset,rdd rdd比mapreduce的檔案模型更抽象,依賴於運算關係以確保可恢復性。rdd通常用於分布式共享記憶體或完全虛擬化,也就是說...

Spark和Flink當中的常用運算元詳解

2.spark中action運算元 3.spark運算元部落格鏈結 4.flink datastream transformations 運算元 詳細鏈結 combinebykey 是最通用的對key value型rdd進行聚集操作的聚集函式 aggregation function 類似於aggr...