flink常見面試題


1 簡單介紹一下 Flink

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

DataSet API, 對靜態數據進行批處理操作,將靜態數據抽象成分布式的數據集,用戶可以方便地使用Flink提供的各種操作符對分布式數據集進行處理,支持JavaScalaPython

DataStream API,對數據流進行流處理操作,將流式的數據抽象成分布式的數據流,用戶可以方便地對分布式數據流進行各種操作,支持JavaScala

Table API,對結構化數據進行查詢操作,將結構化數據抽象成關系表,並通過類SQLDSL對關系表進行各種查詢操作,支持JavaScala

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

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

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

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

1. 架構模型Spark Streaming 在運行時的主要角色包括:MasterWorkerDriverExecutorFlink 在運行時主要包含:JobmanagerTaskmanagerSlot

2. 任務調度Spark Streaming 連續不斷的生成微小的數據批次,構建有向無環圖DAGSpark Streaming 會依次創建 DStreamGraphJobGeneratorJobSchedulerFlink 根據用戶提交的代碼生成 StreamGraph,經過優化生成 JobGraph,然后提交給 JobManager進行處理,JobManager 會根據 JobGraph 生成 ExecutionGraphExecutionGraph Flink 調度最核心的數據結構,JobManager 根據 ExecutionGraph Job 進行調度。

3. 時間機制Spark Streaming 支持的時間機制有限,只支持處理時間。 Flink 支持了流處理程序在時間上的三個定義:處理時間、事件時間、注入時間。同時也支持 watermark 機制來處理滯后數據。

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

3 Flink 的運行必須依賴 Hadoop組件嗎?

Flink可以完全獨立於Hadoop,在不依賴Hadoop組件下運行。但是做為大數據的基礎設施,Hadoop體系是任何大數據框架都繞不過去的。Flink可以集成眾多Hadooop 組件,例如YarnHbaseHDFS等等。例如,Flink可以和Yarn集成做資源調度,也可以讀寫HDFS,或者利用HDFS做檢查點。

4 Flink的並行度了解嗎?Flink的並行度設置是怎樣的?

Flink中的任務被分為多個並行任務來執行,其中每個並行的實例處理一部分數據。這些並行實例的數量被稱為並行度。我們在實際生產環境中可以從四個不同層面設置並行度:

操作算子層面(Operator Level)

執行環境層面(Execution Environment Level)

客戶端層面(Client Level)

系統層面(System Level)

需要注意的優先級:算子層面>環境層面>客戶端層面>系統層面。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM