大資料開發筆記

vjvj1101發表於2022-04-16

Flink基礎

1、簡單介紹一下 Flink

Flink 是一個框架和分散式處理引擎,用於對無界和有界資料流進行有狀態計算。並且 Flink 提供了資料分佈、容錯機制以及資源管理等核心功能。Flink提供了諸多高抽象層的API以便使用者編寫分散式任務:


DataSet API, 對靜態資料進行批處理操作,將靜態資料抽象成分散式的資料集,使用者可以方便地使用Flink提供的各種操作符對分散式資料集進行處理,支援Java、Scala和Python。


DataStream API,對資料流進行流處理操作,將流式的資料抽象成分散式的資料流,使用者可以方便地對分散式資料流進行各種操作,支援Java和Scala。


Table API,對結構化資料進行查詢操作,將結構化資料抽象成關係表,並通過類SQL的DSL對關係表進行各種查詢操作,支援Java和Scala。


此外,Flink 還針對特定的應用領域提供了領域庫,例如: Flink ML,Flink 的機器學習庫,提供了機器學習Pipelines API並實現了多種機器學習演算法, Gelly,Flink 的圖計算庫,提供了圖計算的相關API及多種圖計算演算法實現。


2、Flink相比傳統的Spark Streaming區別?

這個問題是一個非常巨集觀的問題,因為兩個框架的不同點非常之多。但是在面試時有非常重要的一點一定要回答出來:Flink 是標準的實時處理引擎,基於事件驅動。而 Spark Streaming 是微批(Micro-Batch)的模型 。


下面我們就分幾個方面介紹兩個框架的主要區別:


架構模型Spark Streaming 在執行時的主要角色包括:Master、Worker、Driver、Executor,Flink 在執行時主要包含:Jobmanager、Taskmanager和Slot。

任務排程Spark Streaming 連續不斷的生成微小的資料批次,構建有向無環圖DAG,Spark Streaming 會依次建立 DStreamGraph、JobGenerator、JobScheduler。Flink 根據使用者提交的程式碼生成 StreamGraph,經過優化生成 JobGraph,然後提交給 JobManager進行處理,JobManager 會根據 JobGraph 生成 ExecutionGraph,ExecutionGraph 是 Flink 排程最核心的資料結構,JobManager 根據 ExecutionGraph 對 Job 進行排程。

時間機制Spark Streaming 支援的時間機制有限,只支援處理時間。 Flink 支援了流處理程式在時間上的三個定義:處理時間、事件時間、注入時間。同時也支援 watermark 機制來處理滯後資料。

容錯機制對於 Spark Streaming 任務,我們可以設定 checkpoint,然後假如發生故障並重啟,我們可以從上次 checkpoint 之處恢復,但是這個行為只能使得資料不丟失,可能會重複處理,不能做到恰好一次處理語義。Flink 則使用兩階段提交協議來解決這個問題。

3、Flink的元件棧有哪些?

根據 Flink 官網描述,Flink 是一個分層架構的系統,每一層所包含的元件都提供了特定的抽象,用來服務於上層元件。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016760/viewspace-2887461/,如需轉載,請註明出處,否則將追究法律責任。

相關文章