窗口如何確定什么時候執(zhí)行觸發(fā)和關(guān)閉?
窗口的判斷是按照毫秒為單位
如果窗口長度是5秒
窗口的開始: start
窗口的結(jié)束:?start + 窗口長度 -1 毫秒
比如窗口長度是5秒, 從0開始
那么窗口結(jié)束是: 0 + 5000 -1 = 4999
窗口的關(guān)閉和觸發(fā)
窗口不會一直存在,當達到某些條件后,窗口就會執(zhí)行觸發(fā)計算 + 關(guān)閉窗口的動作
窗口的關(guān)閉和觸發(fā)是兩個步驟
1.觸發(fā)窗口計算,對窗口內(nèi)的數(shù)據(jù)進行計算
2.關(guān)閉窗口,數(shù)據(jù)無法進入窗口了
這兩者是同步進行的
后面會學(xué)習(xí)到先觸發(fā),然后等待一段時間后才關(guān)閉的情況,后面再說
窗口關(guān)閉、觸發(fā)的條件
每個窗口都會有:
-開始時間
-結(jié)束時間
窗口的時間單位是毫秒
如何確定數(shù)據(jù)進入哪個窗口
開始時間 和 結(jié)束時間兩者結(jié)合 決定了數(shù)據(jù)是屬于哪個窗口的
數(shù)據(jù)的時間要滿足:
-大于等于開始時間
-小于等于結(jié)束時間
如 5秒的窗口,假設(shè)窗口開始是0,結(jié)束是5000(毫秒)
那么時間1000屬于這個窗口 時間6000不屬于這個窗口
時間4999屬于這個窗口,時間5000不屬于這個窗口
窗口如何確定執(zhí)行觸發(fā)和關(guān)閉
結(jié)束時間決定了窗口何時關(guān)閉和觸發(fā)計算,規(guī)則是:數(shù)據(jù)的時間 滿足?大于等于 結(jié)束時間 - 1毫秒
1 使用處理時間(Processing Time)的情況
如果使用處理時間,那么窗口按照系統(tǒng)時間進行判斷
如果當前系統(tǒng)時間,大于等于窗口的結(jié)束時間,那么這個窗口就會被關(guān)閉,并且被觸發(fā)計算
比如 0 – 5000的窗口
當系統(tǒng)時間走到了:大于 等于 4999就會觸發(fā)窗口計算和關(guān)閉
2 使用事件時間(Event Time)的情況
如果使用事件時間,那么:
當新進入的一條數(shù)據(jù),其事件時間大于等于某個窗口的結(jié)束時間,那么這個窗口被關(guān)閉并觸發(fā)計算
比如:兩個窗口 窗口A是0-5000,窗口B是5000-10000
當數(shù)據(jù)事件時間是大于等于4999(5000 – 1)的數(shù)據(jù)進來,會導(dǎo)致窗口A進行關(guān)閉和觸發(fā)計算。
3 使用水印的情況
如果使用水印,那么:
當新進入的一條數(shù)據(jù),其水印時間,大于等于某個窗口的結(jié)束時間,那么這個窗口被關(guān)閉并觸發(fā)計算
總結(jié)
處理時間:通過當前系統(tǒng)時間決定窗口觸發(fā)和關(guān)閉
當前系統(tǒng)時間會不停的向前走,所以這樣的情況下,窗口的關(guān)閉和觸發(fā)很穩(wěn)定,比如5秒窗口,就每隔5秒觸發(fā)一次
事件時間:通過進入到Flink的數(shù)據(jù),所帶的 事件時間來決定是否關(guān)閉窗口
數(shù)據(jù)如果不進入Flink,那么這個窗口就一直不會被關(guān)閉。
所以事件時間窗口的開關(guān)不穩(wěn)定,取決于數(shù)據(jù)
水印時間:基于數(shù)據(jù)的事件時間,同樣開閉不穩(wěn)定,取決于數(shù)據(jù)是否到來以及到來的數(shù)據(jù)的事件時間是多少,后面學(xué)習(xí)水印機制的時候細說
