Flink是如何支援批流一體的

2022-09-14 14:15:15 字數 2894 閱讀 3832

實現批處理的技術許許多多,從各種關係型資料庫的sql處理,到大資料領域的mapreduce,hive,spark等等。這些都是處理有限資料流的經典方式。而flink專注的是無限流處理,那麼他是怎麼做到批處理的呢?

無限流處理:輸入資料沒有盡頭;資料處理從當前或者過去的某乙個時間 點開始,持續不停地進行

另一種處理形式叫作有限流處理,即從某乙個時間點開始處理資料,然後在另乙個時間點結束。輸入資料可能本身是有限的(即輸入資料集並不會隨著時間增長),也可能出於分析的目的被人為地設定為有限集(即只分析某乙個時間段內的事件)。

顯然,有限流處理是無限流處理的一種特殊情況,大資料培訓它只不過在某個時間點停止而已。此外,如果計算結果不在執行過程中連續生成,而僅在末尾處生成一次,那就是批處理(分批處理資料)。

批處理是流處理的一種非常特殊的情況。在流處理中,我們為資料定義滑 動視窗或滾動視窗,並且在每次視窗滑動或滾動時生成結果。批處理則不同,我們定義乙個全域性視窗,所有的記錄都屬於同乙個視窗。舉例來說, 以下**表示乙個簡單的flink 程式,它負責每小時對某**的訪問者計數,並按照地區分組。

val counts = visits

.keyby(「region」)

.timewindow(time.hours(1))

.sum(「visits」)

如果知道輸入資料是有限的,則可以通過以下**實現批處理。

val counts = visits

.keyby(「region」)

.window(globalwindows.create)

.trigger(endoftimetrigger.create)

.sum(「visits」)

flink 的不尋常之處在於,它既可以將資料當作無限流來處理,也可以將它當作有限流來處理。flink 的 dataset api 就是專為批處理而生的,如下所示。

val counts = visits

.groupby(「region」)

.sum(「visits」)

如果輸入資料是有限的,那麼以上**的執行結果將與前一段**的相同, 但是它對於習慣使用批處理器的程式設計師來說更友好。

fink批處理模型

flink 通過乙個底層引擎同時支援流處理和批處理

在流處理引擎之上,flink 有以下機制:

檢查點機制和狀態機制:用於實現容錯、有狀態的處理;

水印機制:用於實現事件時鐘;

視窗和觸發器:用於限制計算範圍,並定義呈現結果的時間。

在同乙個流處理引擎之上,flink 還存在另一套機制,用於實現高效的批處理。

用於排程和恢復的回溯法:由 microsoft dryad 引入,現在幾乎用於所有批處理器;

用於雜湊和排序的特殊記憶體資料結構:可以在需要時,將一部分資料從記憶體溢位到硬碟上;

優化器:盡可能地縮短生成結果的時間。

兩套機制分別對應各自的api(datastream api 和 dataset api);在建立 flink 作業時,並不能通過將兩者混合在一起來同時 利用 flink 的所有功能。

在最新的版本中,flink 支援兩種關係型的 api,table api 和 sql。這兩個 api 都是批處理和流處理統一的 api,這意味著在無邊界的實時資料流和有邊界的歷史記錄資料流上,關係型 api 會以相同的語義執行查詢,並產生相同的結果。table api 和 sql 借助了 apache calcite 來進行查詢的解析,校驗以及優化。它們可以與 datastream 和 dataset api 無縫整合,深圳大資料培訓並支援使用者自定義的標量函式,聚合函式以及錶值函式。

table api / sql 正在以流批統一的方式成為分析型用例的主要 api。

datastream api 是資料驅動應用程式和資料管道的主要api。

從長遠來看,datastream api應該通過有界資料流完全包含dataset api。

flink批處理效能

mapreduce、tez、spark 和 flink 在執行純批處理任務時的效能比較。測試的批處理任務是 terasort 和分布式雜湊連線。

第乙個任務是 terasort,即測量為 1tb 資料排序所用的時間。

terasort 本質上是分布式排序問題,它由以下幾個階 段組成:

(1) 讀取階段:從 hdfs 檔案中讀取資料分割槽;

(2) 本地排序階段:對上述分割槽進行部分排序;

(3) 混洗階段:將資料按照 key 重新分布到處理節點上;

(4) 終排序階段:生成排序輸出;

(5) 寫入階段:將排序後的分割槽寫入 hdfs 檔案。

hadoop 發行版包含對 terasort 的實現,同樣的實現也可以用於 tez,因為 tez 可以執行通過mapreduce api 編寫的程式。spark 和 flink 的 terasort 實現由 dongwon kim 提供.用來測量的集群由 42 臺機器組成,每台機器 包含 12 個 cpu 核心、24gb 記憶體,以及 6 塊硬碟。

結果顯示,flink 的排序時間比其他所有系統都少。mapreduce 用了2157 秒,tez 用了1887 秒,spark 用了2171 秒,flink 則 只用了 1480 秒。

第二個任務是乙個大資料集(240gb)和乙個小資料集(256mb)之間的分布式雜湊連線。結果顯示,flink 仍然是速度最快的系統,它所用的時間分別是 tez 和 spark 的 1/2 和 1/4.

產生以上結果的總體原因是,flink 的執行過程是基於流的,這意味著各個處理階段有更多的重疊,並且混洗操作是流水線式的,因此磁碟訪問操作更少。相反,mapreduce、tez 和 spark 是基於批的,這意味著資料在通過網路傳輸之前必須先被寫入磁碟。該測試說明,在使用flink 時,系統空閒時間和磁碟訪問操作更少。

值得一提的是,效能測試結果中的原始數值可能會因集群設定、配置和軟體版本而異。

因此,flink 可以用同乙個資料處理框架來處理無限資料流和有限資料流,並且不會犧牲效能。

企業如何搭建一體化資料整合平台?

近幾十年來,科學技術的迅猛發展和資訊化的推進,使得人類社會所積累的資料量已超過過去五千年的總和,資料的採集 儲存 處理和傳播的數量也與日俱增。實現資料傳遞 資料共享,可以讓更多已有的資料得到充分利用,減少各種手段的重複錄入勞動,提高效率,降低相應的費用。但在實現資料共享過程中,由於資料提供途徑 資料...

資料倉儲 資料湖 流批一體,終於有大神講清楚了!

摘要 資料倉儲,資料湖,包括flink社群提的流批一體,它們到底能解決什麼問題?今天將由阿里雲研究員從解決業務問題出發,將問題抽絲剝繭,從技術維度娓娓道來 為什麼你需要資料湖或者資料倉儲解決方案?它的核心難點與核心問題在哪?如果想穩定落地,系統設計該怎麼做?那麼怎麼辦呢?針對市面上這些開源產品,就儲...

教你如何打造完美集引導安裝一體U盤

將u盤分割槽 也可以不分割槽 執行bootice 將其中乙個區啟用 找到menu.lst 用記事本開啟 在檔案後面新增 title 7 進入變色龍 map mem wowpc.iso hd32 map hook chainloader hd32 boot 儲存 記住字尾名必須是.lst 再把變色龍的...