在watermark以前先說下時間的概念,在https://blog.51cto.com/mapengfei/2554577 裏面有各類時間窗口,實際生產中那是以哪一個時間爲準產生的窗口呢? 事件發生的時間? 進入flink程序的時間?仍是flink開始處理的時間
Flink提供了一套設計解決方案
設置能夠在代碼中env直接設置ide
val env = StreamExecutionEnvironment.getExecutionEnvironment // env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime) //以事件時間做爲窗口聚合 //env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime) //以數據進入flink的時間做爲窗口時間 // env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime) //以Flink實際處理時間做爲窗口時間
只能說不一樣的場景下,每一個時間都有使用場景,具體根據實際狀況來實施設計
咱們能夠直接在代碼中,對執行環境調用setStreamCharacteristic方法,設置流的時間特性
具體的時間,還須要從數據中提取時間戳(timestamp),
若是要用事件時間,還須要設置具體取的哪一個字段和格式,不然flink也不知道你用的哪一個字段code
val env = StreamExecutionEnvironment.getExecutionEnvironment
//從調用時刻開始給env建立的每一個stream追加時間特性
env.setStreamTimeCharcteristic(TimeCharacteristic.EventTime)blog