您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Flink中AllowedLateness是什么的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
allowedLateness是Flink window中用來容忍一段時間遲到數據的,對allowedLateness最容易的誤解是它等同于將watermark減去或者說推遲一段時間,通過推遲窗口觸發來容忍一定時間的遲到數據。事實上allowedLateness并不會推遲窗口的觸發時間,它改變的是窗口的清除時間(cleanupTime)。下面是org.apache.flink.streaming.runtime.operators.windowing.WindowOperator的cleanupTime和registerCleanupTimer,這2個方法表明了allowedLateness影響窗口的清除:
/** * Returns the cleanup time for a window, which is * {@code window.maxTimestamp + allowedLateness}. In * case this leads to a value greater than {@link Long#MAX_VALUE} * then a cleanup time of {@link Long#MAX_VALUE} is * returned. * * @param window the window whose cleanup time we are computing. */ private long cleanupTime(W window) { if (windowAssigner.isEventTime()) { long cleanupTime = window.maxTimestamp() + allowedLateness; return cleanupTime >= window.maxTimestamp() ? cleanupTime : Long.MAX_VALUE; } else { return window.maxTimestamp(); } } /** * Registers a timer to cleanup the content of the window. * @param window * the window whose state to discard */ protected void registerCleanupTimer(W window) { long cleanupTime = cleanupTime(window); if (cleanupTime == Long.MAX_VALUE) { // don't set a GC timer for "end of time" return; } if (windowAssigner.isEventTime()) { triggerContext.registerEventTimeTimer(cleanupTime); } else { triggerContext.registerProcessingTimeTimer(cleanupTime); } }
也就是說allowedLateness改變的是窗口的清除時間,watermark觸發窗口計算后窗口沒有立馬被清除而是等待allowedLateness后再清除,在這期間收到該窗口遲到數據時都會觸發一次窗口計算。如下圖,小圓表示窗口中的元素,watermark達到窗口endTime時會觸發一次窗口計算,遲到的小圓還會分別觸發一次窗口計算。
感謝各位的閱讀!關于“Flink中AllowedLateness是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。