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物理計划