flink面試題


16. Flink中有哪些窗口?

 

 

 

 

Flink 支持兩種划分窗口的方式,按照time和count。如果根據時間划分窗口,那么它就是一個time-window 如果根據數據划分窗口,那么它就是一個count-window。flink支持窗口的兩個重要屬性(size和interval)如果size=interval,那么就會形成tumbling-window(無重疊數據) 如果size>interval,那么就會形成sliding-window(有重疊數據) 如果size< interval, 那么這種窗口將會丟失數據。比如每5秒鍾,統計過去3秒的通過路口汽車的數據,將會漏掉2秒鍾的數據。通過組合可以得出四種基本窗口:

time-tumbling-window 無重疊數據的時間窗口,設置方式舉例:timeWindow(Time.seconds(5))

time-sliding-window 有重疊數據的時間窗口,設置方式舉例:timeWindow(Time.seconds(5), Time.seconds(3))

count-tumbling-window無重疊數據的數量窗口,設置方式舉例:countWindow(5)

count-sliding-window 有重疊數據的數量窗口,設置方式舉例:countWindow(5,3)

17. 說說Flink中的狀態存儲?

Flink在做計算的過程中經常需要存儲中間狀態,來避免數據丟失和狀態恢復。選擇的狀態存儲策略不同,會影響狀態持久化如何和 checkpoint 交互。Flink提供了三種狀態存儲方式:MemoryStateBackend、FsStateBackend、RocksDBStateBackend。

18. Flink中的時間有哪幾類

Flink 中的時間和其他流式計算系統的時間一樣分為三類:事件時間,攝入時間,處理時間三種。如果以 EventTime 為基准來定義時間窗口將形成EventTimeWindow,要求消息本身就應該攜帶EventTime。如果以 IngesingtTime 為基准來定義時間窗口將形成 IngestingTimeWindow,以 source 的systemTime為准。如果以 ProcessingTime 基准來定義時間窗口將形成 ProcessingTimeWindow,以 operator 的systemTime 為准。

19. Flink 中水印是什么概念,起到什么作用?

Watermark 是 Apache Flink 為了處理 EventTime 窗口計算提出的一種機制, 本質上是一種時間戳。 一般來講Watermark經常和Window一起被用來處理亂序事件。

20. Flink Table & SQL 熟悉嗎?TableEnvironment這個類有什么作用

TableEnvironment是Table API和SQL集成的核心概念。這個類主要用來:

在內部catalog中注冊表

注冊外部catalog

執行SQL查詢

注冊用戶定義(標量,表或聚合)函數

將DataStream或DataSet轉換為表

持有對ExecutionEnvironment或StreamExecutionEnvironment的引用

21. Flink SQL的實現原理是什么?是如何實現 SQL 解析的呢?

首先大家要知道 Flink 的SQL解析是基於Apache Calcite這個開源框架。

基於此,一次完整的SQL解析過程如下:

用戶使用對外提供Stream SQL的語法開發業務應用

用calcite對StreamSQL進行語法檢驗,語法檢驗通過后,轉換成calcite的邏輯樹節點;最終形成calcite的邏輯計划

采用Flink自定義的優化規則和calcite火山模型、啟發式模型共同對邏輯樹進行優化,生成最優的Flink物理計划

對物理計划采用janino codegen生成代碼,生成用低階API DataStream 描述的流應用,提交到Flink平台執行


免責聲明!

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



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