溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Flink相關面試題有哪些

發布時間:2021-12-31 10:29:51 來源:億速云 閱讀:163 作者:iii 欄目:大數據

本篇內容介紹了“Flink相關面試題有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、Flink Job的提交流程

用戶提交的Flink Job會被轉化成一個DAG任務運行,分別是:StreamGraph、JobGraph、ExecutionGraph,Flink中JobManager與TaskManager,JobManager與Client的交互是基于Akka工具包的,是通過消息驅動。整個Flink Job的提交還包含著ActorSystem的創建,JobManager的啟動,TaskManager的啟動和注冊。

二、Flink所謂"三層圖"結構是哪幾個"圖"?

一個Flink任務的DAG生成計算圖大致經歷以下三個過程:

  • StreamGraph
    最接近代碼所表達的邏輯層面的計算拓撲結構,按照用戶代碼的執行順序向StreamExecutionEnvironment添加StreamTransformation構成流式圖。

  • JobGraph
    從StreamGraph生成,將可以串聯合并的節點進行合并,設置節點之間的邊,安排資源共享slot槽位和放置相關聯的節點,上傳任務所需的文件,設置檢查點配置等。相當于經過部分初始化和優化處理的任務圖。

  • ExecutionGraph
    由JobGraph轉換而來,包含了任務具體執行所需的內容,是最貼近底層實現的執行圖。

三、JobManger在集群中扮演了什么角色?

JobManager 負責整個 Flink 集群任務的調度以及資源的管理,從客戶端中獲取提交的應用,然后根據集群中 TaskManager 上 TaskSlot 的使用情況,為提交的應用分配相應的 TaskSlot 資源并命令 TaskManager 啟動從客戶端中獲取的應用。

JobManager 相當于整個集群的 Master 節點,且整個集群有且只有一個活躍的 JobManager ,負責整個集群的任務管理和資源管理。

JobManager 和 TaskManager 之間通過 Actor System 進行通信,獲取任務執行的情況并通過 Actor System 將應用的任務執行情況發送給客戶端。

同時在任務執行的過程中,Flink JobManager 會觸發 Checkpoint 操作,每個 TaskManager 節點 收到 Checkpoint 觸發指令后,完成 Checkpoint 操作,所有的 Checkpoint 協調過程都是在 Fink JobManager 中完成。

當任務完成后,Flink 會將任務執行的信息反饋給客戶端,并且釋放掉 TaskManager 中的資源以供下一次提交任務使用。

四、JobManger在集群啟動過程中起到什么作用?

JobManager的職責主要是接收Flink作業,調度Task,收集作業狀態和管理TaskManager。它包含一個Actor,并且做如下操作:

  • RegisterTaskManager: 它由想要注冊到JobManager的TaskManager發送。注冊成功會通過AcknowledgeRegistration消息進行Ack。

  • SubmitJob: 由提交作業到系統的Client發送。提交的信息是JobGraph形式的作業描述信息。

  • CancelJob: 請求取消指定id的作業。成功會返回CancellationSuccess,否則返回CancellationFailure。

  • UpdateTaskExecutionState: 由TaskManager發送,用來更新執行節點(ExecutionVertex)的狀態。成功則返回true,否則返回false。

  • RequestNextInputSplit: TaskManager上的Task請求下一個輸入split,成功則返回NextInputSplit,否則返回null。

  • JobStatusChanged:它意味著作業的狀態(RUNNING, CANCELING, FINISHED,等)發生變化。這個消息由ExecutionGraph發送。

五、TaskManager在集群中扮演了什么角色?

TaskManager 相當于整個集群的 Slave 節點,負責具體的任務執行和對應任務在每個節點上的資源申請和管理。

客戶端通過將編寫好的 Flink 應用編譯打包,提交到 JobManager,然后 JobManager 會根據已注冊在 JobManager 中 TaskManager 的資源情況,將任務分配給有資源的 TaskManager節點,然后啟動并運行任務。

TaskManager 從 JobManager 接收需要部署的任務,然后使用 Slot 資源啟動 Task,建立數據接入的網絡連接,接收數據并開始數據處理。同時 TaskManager 之間的數據交互都是通過數據流的方式進行的。

可以看出,Flink 的任務運行其實是采用多線程的方式,這和 MapReduce 多 JVM 進行的方式有很大的區別,Flink 能夠極大提高 CPU 使用效率,在多個任務和 Task 之間通過 TaskSlot 方式共享系統資源,每個 TaskManager 中通過管理多個 TaskSlot 資源池進行對資源進行有效管理。

六、TaskManager在集群啟動過程中起到什么作用? 

TaskManager的啟動流程較為簡單:
啟動類:org.apache.flink.runtime.taskmanager.TaskManager
核心啟動方法 :selectNetworkInterfaceAndRunTaskManager
啟動后直接向JobManager注冊自己,注冊完成后,進行部分模塊的初始化。

七、Flink 計算資源的調度是如何實現的?

TaskManager中最細粒度的資源是Task slot,代表了一個固定大小的資源子集,每個TaskManager會將其所占有的資源平分給它的slot。

通過調整 task slot 的數量,用戶可以定義task之間是如何相互隔離的。每個 TaskManager 有一個slot,也就意味著每個task運行在獨立的 JVM 中。每個 TaskManager 有多個slot的話,也就是說多個task運行在同一個JVM中。

而在同一個JVM進程中的task,可以共享TCP連接(基于多路復用)和心跳消息,可以減少數據的網絡傳輸,也能共享一些數據結構,一定程度上減少了每個task的消耗。
每個slot可以接受單個task,也可以接受多個連續task組成的pipeline,如下圖所示,FlatMap函數占用一個taskslot,而key Agg函數和sink函數共用一個taskslot:

Flink相關面試題有哪些

八、簡述Flink的數據抽象及數據交換過程?

Flink 為了避免JVM的固有缺陷例如java對象存儲密度低,FGC影響吞吐和響應等,實現了自主管理內存。MemorySegment就是Flink的內存抽象。默認情況下,一個MemorySegment可以被看做是一個32kb大的內存塊的抽象。這塊內存既可以是JVM里的一個byte[],也可以是堆外內存(DirectByteBuffer)。

在MemorySegment這個抽象之上,Flink在數據從operator內的數據對象在向TaskManager上轉移,預備被發給下個節點的過程中,使用的抽象或者說內存對象是Buffer。

對接從Java對象轉為Buffer的中間對象是另一個抽象StreamRecord。

九、Flink 中的分布式快照機制是如何實現的?

Flink的容錯機制的核心部分是制作分布式數據流和操作算子狀態的一致性快照。這些快照充當一致性checkpoint,系統可以在發生故障時回滾。Flink用于制作這些快照的機制在“分布式數據流的輕量級異步快照”中進行了描述。它受到分布式快照的標準Chandy-Lamport算法的啟發,專門針對Flink的執行模型而定制。

Flink相關面試題有哪些

barriers在數據流源處被注入并行數據流中??煺課的barriers被插入的位置(我們稱之為Sn)是快照所包含的數據在數據源中最大位置。例如,在Apache Kafka中,此位置將是分區中最后一條記錄的偏移量。將該位置Sn報告給checkpoint協調器(Flink的JobManager)。

然后barriers向下游流動。當一個中間操作算子從其所有輸入流中收到快照n的barriers時,它會為快照n發出barriers進入其所有輸出流中。一旦sink操作算子(流式DAG的末端)從其所有輸入流接收到barriers n,它就向checkpoint協調器確認快照n完成。在所有sink確認快照后,意味快照著已完成。

一旦完成快照n,job將永遠不再向數據源請求Sn之前的記錄,因為此時這些記錄(及其后續記錄)將已經通過整個數據流拓撲,也即是已經被處理結束。

十、簡單說說FlinkSQL的是如何實現的?

Flink 將 SQL 校驗、SQL 解析以及 SQL 優化交給了Apache Calcite。Calcite 在其他很多開源項目里也都應用到了,譬如 Apache Hive, Apache Drill, Apache Kylin, Cascading。Calcite 在新的架構中處于核心的地位,如下圖所示。

Flink相關面試題有哪些

構建抽象語法樹的事情交給了 Calcite 去做。SQL query 會經過 Calcite 解析器轉變成 SQL 節點樹,通過驗證后構建成 Calcite 的抽象語法樹(也就是圖中的 Logical Plan)。另一邊,Table API 上的調用會構建成 Table API 的抽象語法樹,并通過 Calcite 提供的 RelBuilder 轉變成 Calcite 的抽象語法樹。然后依次被轉換成邏輯執行計劃和物理執行計劃。

在提交任務后會分發到各個 TaskManager 中運行,在運行時會使用 Janino 編譯器編譯代碼后運行。

“Flink相關面試題有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女