柚子快報激活碼778899分享:大數(shù)據(jù)Flink面試考題
柚子快報激活碼778899分享:大數(shù)據(jù)Flink面試考題
9.fink的高可用模式,主要是防止 JobManager出現(xiàn)單點故障,確保集群的高可用。()
10 Hlink SoL底層 Runtime本身是一個流與批的統(tǒng)一的引擘, HlinkSQL可以做到AP層的流與 批統(tǒng)一。()
下面為模擬面試,假如面試官考你Flink相關(guān),你該如何回答呢?
1.簡單介紹一下 Flink
Flink 核心是一個流式的數(shù)據(jù)流執(zhí)行引擎,其針對數(shù)據(jù)流的分布式計算提供了數(shù)據(jù)分布、數(shù) 據(jù)通信以及容錯機制等功能。 基于流執(zhí)行引擎,F(xiàn)link 提供了諸多更高抽象層的 API 以便用戶編 寫分布式任務(wù):DataSet API, 對靜態(tài)數(shù)據(jù)進行批處理操作,將靜態(tài)數(shù)據(jù)抽象成分布式的數(shù)據(jù)集, 用戶可以方便地使用 Flink 提供的各種操作符對分布式數(shù)據(jù)集進行處理,支持 Java、Scala 和 Python。DataStream API,對數(shù)據(jù)流進行流處理操作,將流式的數(shù)據(jù)抽象成分布式的數(shù)據(jù)流,用 戶可以方便地對分布式數(shù)據(jù)流進行各種操作,支持 Java 和 Scala。Table API,對結(jié)構(gòu)化數(shù)據(jù)進 行查詢操作,將結(jié)構(gòu)化數(shù)據(jù)抽象成關(guān)系表,并通過類 SQL 的 DSL 對關(guān)系表進行各種查詢操作,支 持 Java 和 Scala。此外,F(xiàn)link 還針對特定的應(yīng)用領(lǐng)域提供了領(lǐng)域庫,例如:Flink ML,F(xiàn)link 的機器學(xué)習(xí)庫,提供了機器學(xué)習(xí) Pipelines API 并實現(xiàn)了多種機器學(xué)習(xí)算法。Gelly,F(xiàn)link 的圖 計算庫,提供了圖計算的相關(guān) API 及多種圖計算算法實現(xiàn)。
2.Flink 相比 Spark Streaming 有什么區(qū)別?
架構(gòu)模型上:Spark Streaming 的 task 運行依賴 driver 和 executor 和 worker,當(dāng)然 driver 和 excutor 還依賴于集群管理器 Standalone 或者 yarn 等。而 Flink 運行時主要是 JobManager、 TaskManage 和 TaskSlot。另外一個最核心的區(qū)別是:Spark Streaming 是微批處理,運行的時 候需要指定批處理的時間,每次運行 job 時處理一個批次的數(shù)據(jù);Flink 是基于事件驅(qū)動的, 事件可以理解為消息。事件驅(qū)動的應(yīng)用程序是一種狀態(tài)應(yīng)用程序,它會從一個或者多個流中注入 事件,通過觸發(fā)計算更新狀態(tài),或外部動作對注入的事件作出反應(yīng)。 任務(wù)調(diào)度上:Spark Streaming 的調(diào)度分為構(gòu)建 DGA 圖,劃分 stage,生成 taskset,調(diào)度 task 等步驟,而 Flink 首先會生成 StreamGraph,接著生成 JobGraph,然后將 jobGraph 提交 給 Jobmanager 由它完成 jobGraph 到 ExecutionGraph 的轉(zhuǎn)變,最后由 jobManager 調(diào)度執(zhí)行。 時間機制上:flink 支持三種時間機制事件時間,注入時間,處理時間,同時支持 watermark 機制處理滯后數(shù)據(jù)。Spark Streaming 只支持處理時間,Structured streaming 則支持了事件時 間和 watermark 機制。 容錯機制上:二者保證 exactly-once 的方式不同。spark streaming 通過保存 offset 和事 務(wù)的方式;Flink 則使用兩階段提交協(xié)議來解決這個問題。
3 Flink 中的分區(qū)策略有哪幾種?
分區(qū)策略是用來決定數(shù)據(jù)如何發(fā)送至下游。目前 Flink 支持了8中分區(qū)策略的實現(xiàn)。
1)GlobalPartitioner 數(shù)據(jù)會被分發(fā)到下游算子的第一個實例中進行處理。
2)ShufflePartitioner 數(shù)據(jù)會被隨機分發(fā)到下游算子的每一個實例中進行處理。
3)RebalancePartitioner 數(shù)據(jù)會被循環(huán)發(fā)送到下游的每一個實例中進行處理。
4)RescalePartitioner 這種分區(qū)器會根據(jù)上下游算子的并行度,循環(huán)的方式輸出到下游算子的每個實例。這里有點難以理解,假設(shè)上游并行度為2,編號為A和B。下游并行度為4,編號為1,2,3,4。那么A則把數(shù)據(jù)循環(huán)發(fā)送給1和2,B則把數(shù)據(jù)循環(huán)發(fā)送給3和4。假設(shè)上游并行度為4,編號為A,B,C,D。下游并行度為2,編號為1,2。那么A和B則把數(shù)據(jù)發(fā)送給1,C和D則把數(shù)據(jù)發(fā)送給2。
5)BroadcastPartitioner 廣播分區(qū)會將上游數(shù)據(jù)輸出到下游算子的每個實例中。適合于大數(shù)據(jù)集和小數(shù)據(jù)集做Jion的場景。
6)ForwardPartitioner ForwardPartitioner 用于將記錄輸出到下游本地的算子實例。它要求上下游算子并行度一樣。簡單的說,F(xiàn)orwardPartitioner用來做數(shù)據(jù)的控制臺打印。
7)KeyGroupStreamPartitioner Hash分區(qū)器。會將數(shù)據(jù)按 Key 的 Hash 值輸出到下游算子實例中。
8)CustomPartitionerWrapper 用戶自定義分區(qū)器。需要用戶自己實現(xiàn)Partitioner接口,來定義自己的分區(qū)邏輯
4 Flink 的并行度有了解嗎?Flink 中設(shè)置并行度需要注意什么?
柚子快報激活碼778899分享:大數(shù)據(jù)Flink面試考題
好文推薦
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。