­

Flink SQL項目實錄

  • 2019 年 12 月 24 日
  • 筆記

一、Flink SQL層級

為Flink最高層的API,易於使用,所以應用更加廣泛,eg. ETL、統計分析、實時報表、實時風控等。

Flink SQL所處的層級:

二、Flink聚合:

1、Window Aggregate

內置了三種常用的窗口:

TUMBLE(time, INTERVAL '5'  SECOND);     //類似於flink 中間層 DataStream API 中 window中的滾動窗口

HOP(time, INTERVAL '10' SECOND, INTERVAL '5' SECOND);     //類似於flink 中間層 DataStream API中 window的滑動窗口,每10秒中統計最近5秒的數據

SESSION(time, INTERVAL '5' SECOND)

time有兩種格式的時間,一種是proctime也就是系統時間, 另一種是rowtime。

2、 Group Aggregate

繼續加入數據時:

 繼續進入數據:

結果是一個不斷更新的過程。

Window Aggregate 與 Group Aggregate 的區別

1)、Window Aggregate 與 Group Aggregate 是有一些明顯的區別的。其主要的區別是,Window Aggregate 是當window結束時才輸出,其輸出的結果是最終值,不會再進行修改,其輸出流是一個 Append 流。

而 Group Aggregate 是每處理一條數據,就輸出最新的結果,其結果是在不斷更新的,就好像數據庫中的數據一樣,其輸出流是一個 Update 流。

2)、另外一個區別是,window Aggregate 由於有 watermark ,可以精確知道哪些窗口已經過期了,所以可以及時清理過期狀態,保證狀態維持在穩定的大小。

而 Group Aggregate 因為不知道哪些數據是過期的,所以狀態會無限增長,這對於生產作業來說不是很穩定,所以建議對 Group Aggregate 的作業配上 State TTL 的配置。

對比圖:

 項目代碼設置:

tEnv.getConfig().setIdleStateRetentionTime(org.apache.flink.api.common.time.Time.minutes(1),org.apache.flink.api.common.time.Time.minutes(10));