Flink中的事件語(yǔ)義和watermark機(jī)制
【[白話(huà)解析] Flink的Watermark機(jī)制】:https://www.cnblogs.com/rossiXYZ/p/12286407.html
一乌妙、Flink窗口(window)
1系羞、窗口(window)的作用
窗口(window)是將無(wú)限流切割為有限流的一種方式,它會(huì)將流數(shù)據(jù)分發(fā)到有限大小的桶(bucket)中進(jìn)行分析。
2、window類(lèi)型
時(shí)間窗口:滾動(dòng)時(shí)間窗口檬嘀、滑動(dòng)時(shí)間窗口、會(huì)話(huà)窗口啃勉。
計(jì)數(shù)窗口:滾動(dòng)計(jì)數(shù)窗口淮阐、滑動(dòng)計(jì)數(shù)窗口浩姥。
滾動(dòng)時(shí)間窗口
特點(diǎn):時(shí)間對(duì)齊膏孟,窗口長(zhǎng)度固定柒桑,沒(méi)有重疊丢氢。
滑動(dòng)時(shí)間窗口
特點(diǎn):窗口大小仇奶、滑動(dòng)步長(zhǎng)固定岛抄,可以有重疊夫椭。
會(huì)話(huà)時(shí)間窗口
特點(diǎn):指定固定時(shí)間間隙。
二羽莺、Flink時(shí)間語(yǔ)義
1、時(shí)間語(yǔ)義
<u><u>Event Time:事件時(shí)間礁哄。(流事件的時(shí)間戳)</u></u>
Ingestion Time:提取事件桐绒,事件進(jìn)入Flink的事件。
Processing Time:執(zhí)行操作算子的本地系統(tǒng)事件烁竭,與機(jī)器無(wú)關(guān)派撕。
2、亂序數(shù)據(jù)的影響
當(dāng)Flink以Event Time模式處理數(shù)據(jù)流時(shí),它會(huì)根據(jù)數(shù)據(jù)里的時(shí)間戳來(lái)處理基于時(shí)間的算子。
由于網(wǎng)絡(luò)幔戏、分布式等原因闲延,會(huì)導(dǎo)致亂序數(shù)據(jù)的產(chǎn)生邢笙。
亂序數(shù)據(jù)會(huì)讓窗口計(jì)算不準(zhǔn)確。
三、Flink對(duì)亂序時(shí)間處理
解決方案:Watermark/allowLateNess/sideOutPut
1杨箭、水位線(xiàn)(Watermark)
Watermark:遇到一個(gè)時(shí)間戳達(dá)到了窗口關(guān)閉時(shí)間辽狈,<u><u>不應(yīng)該立刻觸發(fā)窗口計(jì)算</u></u>,而是等待一段時(shí)間,等遲到的數(shù)據(jù)來(lái)了再關(guān)閉窗口猜绣。
2、allowLateNess
allowLateNess:<u><u>達(dá)到窗口關(guān)閉時(shí)間澎语,觸發(fā)窗口計(jì)算途事,但窗口關(guān)閉時(shí)間延長(zhǎng)。</u></u>
優(yōu)點(diǎn):機(jī)制允許用戶(hù)設(shè)置一個(gè)允許的最大遲到時(shí)長(zhǎng)擅羞,這期間的遲到時(shí)間不會(huì)被丟棄尸变,而是默認(rèn)會(huì)觸發(fā)窗口重新計(jì)算。
缺點(diǎn):因?yàn)楸4娲翱跔顟B(tài)需要額外內(nèi)存减俏,并且遲到事件會(huì)觸發(fā)窗口的全量計(jì)算召烂,代價(jià)比較大,所以允許遲到時(shí)長(zhǎng)不應(yīng)設(shè)的太長(zhǎng)娃承,遲到事件不宜過(guò)多奏夫。
注:設(shè)置Watermark設(shè)置的延遲時(shí)間不結(jié)束不會(huì)輸出結(jié)果怕篷,而allowLateNess在時(shí)間結(jié)束后會(huì)輸出結(jié)果但窗口不會(huì)關(guān)閉,會(huì)在設(shè)置的延遲時(shí)間內(nèi)更新結(jié)果酗昼。
3廊谓、sideOutPut
sideOutPut:當(dāng)指定窗口徹底關(guān)閉后,就會(huì)把所有過(guò)期延遲數(shù)據(jù)放到側(cè)輸出流麻削,讓用戶(hù)決定如何處理蒸痹。