Flink大數據計算框架

什麼是Flink

Flink通過實現Google Dataflow流式計算模型實現了高吞吐、低延遲、高性能兼具實時流式計算框架。同時Flink支持高度容錯的狀態管理,防止狀態在計算過程中因爲系統異常而出現丟失,Flink週期性地通過分佈式快照技術Checkpoints實現狀態的持久化維護,使得即使在系統停機或者異常的情況下都能計算出正確的結果。

爲什麼選擇Flink(優點、特性)

同時支持高吞吐、低延遲、高性能

Flink是目前開源社區中唯一一套集高吞吐、低延遲、高性能三者於一身的分佈式流式數據處理框架。
像Apache Spark也只能兼顧高吞吐和高性能特性,主要因爲在Spark Streaming流式計算中無法做到低延遲保障;而流式計算框架Apache Storm只能支持低延遲和高性能特性,但是無法滿足高吞吐的要求。而滿足高吞吐、低延遲、高性能這三個目標對分佈式流式計算框架來說是非常重要的。

支持事件時間(Event Time)概念

在流式計算領域中,窗口計算的地位舉足輕重,但目前大多數框架窗口計算採用的都是系統時間(Process Time),也是事件傳輸到計算框架處理時,系統主機的當前時間。Flink能夠支持基於事件時間(Event Time)語義進行窗口計算,也就是使用事件產生的時間,這種基於事件驅動的機制使得事件即使亂序到達,流系統也能夠計算出精確的結果,保持了事件原本產生時的時序性,儘可能避免網絡傳輸或硬件系統的影響。

支持有狀態計算

Flink在1.4版本中實現了狀態管理,所謂狀態就是在流式計算過程中將算子的中間結果數據保存在內存或者文件系統中,等下一個事件進入算子後可以從之前的狀態中獲取中間結果中計算當前的結果,從而無須每次都基於全部的原始數據來統計結果,這種方式極大地提升了系統的性能,並降低了數據計算過程的資源消耗。對於數據量大且運算邏輯非常複雜的流式計算場景,有狀態計算髮揮了非常重要的作用。

支持高度靈活的窗口(windows)操作

在流處理應用中,數據是連續不斷的,需要通過窗口的方式對流數據進行一定範圍的聚合計算,例如統計在過去的1分鐘內有多少用戶點擊某一網頁,在這種情況下,我們必須定義一個窗口,用來收集最近一分鐘內的數據,並對這個窗口內的數據進行再計算。Flink將窗口劃分爲基於Time、Count、Session,以及Data-driven等類型的窗口操作,窗口可以用靈活的觸發條件定製化來達到對複雜的流傳輸模式的支持,用戶可以定義不同的窗口觸發機制來滿足不同的需求。

基於輕量級分佈式快照(Snapshot)實現的容錯

Flink能夠分佈式運行在上千個節點上,將一個大型計算任務的流程拆解成小的計算過程,然後將tesk分佈到並行節點上進行處理。在任務執行過程中,能夠自動發現事件處理過程中的錯誤而導致數據不一致的問題,比如:節點宕機、網路傳輸問題,或是由於用戶因爲升級或修復問題而導致計算服務重啓等。在這些情況下,通過基於分佈式快照技術的Checkpoints,將執行過程中的狀態信息進行持久化存儲,一旦任務出現異常停止,Flink就能夠從Checkpoints中進行任務的自動恢復,以確保數據在處理過程中的一致性。

基於JVM實現獨立的內存管理

內存管理是所有計算框架需要重點考慮的部分,尤其對於計算量比較大的計算場景,數據在內存中該如何進行管理顯得至關重要。針對內存管理,Flink實現了自身管理內存的機制,儘可能減少JVM GC對系統的影響。另外,Flink通過序列化/反序列化方法將所有的數據對象轉換成二進制在內存中存儲,降低數據存儲的大小的同時,能夠更加有效地對內存空間進行利用,降低GC帶來的性能下降或任務異常的風險,因此Flink較其他分佈式處理的框架會顯得更加穩定,不會因爲JVM GC等問題而影響整個應用的運行。

Save Points(保存點)

對於7*24小時運行的流式應用,數據源源不斷地接入,在一段時間內應用的終止有可能導致數據的丟失或者計算結果的不準確,例如進行集羣版本的升級、停機運維操作等操作。值得一提的是,Flink通過Save Points技術將任務執行的快照保存在存儲介質上,當任務重啓的時候可以直接從事先保存的Save Points恢復原有的計算狀態,使得任務繼續按照停機之前的狀態運行,Save Points技術可以讓用戶更好地管理和運維實時流式應用

Save Points(保存點)的應用

配置文件配置:

flink-conf.yaml中配置Savepoint存儲位置:
state.savepoints.dir: hdfs://host:port/flink-savepoints

手動指定路徑:

flink savepoint :xxxx hdfs://host:port/flink-savepoints/savepoint-diy-xxxx

停止任務與指定Save Point啓動任務:

flink cancel -s xxxx
flink run -s hdfs://host:prot/flink-savepoints/savepoint-xxxx

Flink任務的提交時參數設置(類比Spark)

flink run -m yarn-cluster -p 2 -yjm 1g -ytm 1g -yn 2 -ys 2 -ynm YourApplicationName -yqu test -c YourApplicationClass your_jar.jar

在這裏插入圖片描述
其中-p是指程序提交時設置的並行度,-ys可以理解爲程序申請的最大並行度

Flink 程序並行度的問題(parallelism 和 slot)

此處Task Managers=3,s=3(總slot=3*3),parallelism=1
在這裏插入圖片描述

1.parallelism設置方式有三種:配置文件默認配置;flink任務提交參數;程序運行代碼指定parallelism。

2.這裏程序提交parallelism=9,但在保存文件操作時設置parallelism=1。在這裏插入圖片描述

Flink 作業提交架構流程

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章