這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)watermark該怎么理解,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
站在用戶的角度思考問題,與客戶深入溝通,找到棗強網(wǎng)站設(shè)計與棗強網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、虛擬主機、企業(yè)郵箱。業(yè)務(wù)覆蓋棗強地區(qū)。
經(jīng)常有球友或者微信群友反饋自己搞不明白watermark怎么回事兒,所以今天小編準(zhǔn)備發(fā)文詳細(xì)說明一下。
首先,拿基于窗口的計算來說吧,窗口的大小 size和滑動間隔 slide,都是基于時間維度處理的,像Spark Streaming就是基于處理時間,也即是處理任務(wù)所在機器的本地時間,用這個時間處理數(shù)據(jù)我們自然無法關(guān)注事件是否在時間維度上亂序,是否是滯后數(shù)據(jù),那么為了保證數(shù)據(jù)有序和處理滯后數(shù)據(jù)就不能用處理時間進(jìn)行處理。
幸運的事情是往往我們采集數(shù)據(jù)的時候往往會給數(shù)據(jù)打上一個采集時間,那么我們在后面流處理的時候假如窗口大小 size和滑動間隔 slide 是基于這個時間的話,那么我們就可以感知到事件是否在時間維度上有序,是否滯后。在這種情況下就引入了watermark,其作用一是驅(qū)動流計算向前執(zhí)行,二是可以作為依據(jù)處理延遲數(shù)據(jù),也即是可以允許數(shù)據(jù)有多大的延遲。
1. 時間概念
從時間概念上來講,對于流程序總共有三種時間概念:
處理時間
注入時間
事件時間
其中,注入時間可以視為事件時間的特殊形式,但是要注意的事情是注入時間就不能處理無序事件和滯后事件,自然不能用watermark機制了。
2. 事件時間和watermark
支持事件時間的流處理器需要一種方法來測量事件時間的進(jìn)展。例如,一個小時窗口windows的操作,當(dāng)事件時間已經(jīng)超過一個小時的時候需要通知該操作算子,以便操作算子可以關(guān)閉正在進(jìn)行中的窗口。
例如在一個程序中,操作算子的當(dāng)前事件時間可能稍微落后于處理時間(事件傳輸延遲導(dǎo)致的)。另外流程序可能只需要幾秒鐘的處理時間就可以處理事件跨度為幾周的數(shù)據(jù),比如通過快速處理一些已經(jīng)緩存在kafka topic(或者另外的消息隊列)中的歷史數(shù)據(jù)。
Flink中使用watermark去測量事件時間的進(jìn)度。Watermark 作為數(shù)據(jù)流的一部分,攜帶一個時間戳 t。一個Watermark(t) 聲明事件時間已經(jīng)到達(dá)時間t,意味著已經(jīng)沒有事件時間t1<t的元素在流中存在(也即時間的時間戳應(yīng)該早于或者等于watermark)。如下圖:
Watermark對于無序流是至關(guān)重要的,如下圖所示,事件不是根據(jù)時間戳排序。一般來說,watermark類似于deadline吧,到了這個點你還沒到,那就pass掉了。也即是一旦watermark到達(dá)操作算子,操作算子就可以將內(nèi)部時間設(shè)置為watermark的值,再來數(shù)據(jù)就會棄掉了。
3. 在并行流中的watermark
對于flink來說,一般Watermark是在Source函數(shù)生成,當(dāng)然也可以再后期的算子中生成,但是一定要在時間函數(shù)(主要是窗口函數(shù))之前生成。一個source函數(shù)的每個并行子任務(wù)通常獨立的產(chǎn)生watermark。這些watermark定義了特定并行source的事件時間。
當(dāng)watermark流經(jīng)流程序時,會調(diào)整操作算子中的事件時間至watermark到達(dá)的時間。每當(dāng)操作算子更新它自己的事件時間時,它就會為后繼的操作算子生成一個新的下行watermark。
一些操作算子會有多個輸入流。例如,union操作或者keyBy(...)或partition(...)之后的操作.這些操作算子的當(dāng)前事件時間是取決于所有輸入流最小的事件時間。當(dāng)輸入流更新它們的事件時間時,操作算子也會更新。
下圖顯示了,流經(jīng)并行流的事件和watermark,以及跟蹤事件時間的運算符。
4. 遲滯元素
也可能存在違反watermark條件的事件,也即在Watermark(t) 已經(jīng)發(fā)生以后,會有時間戳t1<t的事件出現(xiàn)。事實上,在現(xiàn)實設(shè)置中,某些事件可能會有任意的延遲,使得所有元素在watermark之前準(zhǔn)時到達(dá)變得不是很可能。即使延遲是有界的,大尺度的延遲watermark也是不可取的,因為會導(dǎo)致事件時間窗口計算延遲很大,窗口會等到watermark時間戳到達(dá)才會刷寫到sink的。
比如,窗口一個小時,watermark設(shè)置的是一天,那結(jié)果就會在一天零一個小時候刷出去,這個明顯不是我們要的,尤其是對實時性要求比較高的。
5. 空閑source
目前,對于純事件時間watermark生成器,如果沒有要處理的事件,則watermark是不會生成并且下發(fā)的。 這意味著在輸入數(shù)據(jù)存在間隙的情況下,事件時間將不會繼續(xù)前進(jìn),例如窗口操作算子將不會被觸發(fā),因此現(xiàn)有窗口將不能產(chǎn)生任何輸出數(shù)據(jù)。
為了避免這種情況,可以使用周期watermark分配器,它們不僅基于事件時間戳進(jìn)行分配,還會在沒有事件的時候產(chǎn)生空的watermark。 比如可以在長時間沒有觀測到事件流入的話,可以采用系統(tǒng)當(dāng)前時間來生成watermark。
當(dāng)然,可以使用SourceFunction.SourceContext #markAsTemporarilyIdle將源標(biāo)記為空閑。
6. watermark處理機制
前面說了,watarmark的作用和產(chǎn)生,那么watermark是如何被算子處理的呢?
通用的規(guī)則是操作算子需要在向下游轉(zhuǎn)發(fā)watermark之前完全處理給定的watermark。 例如,WindowOperator將首先評估應(yīng)該觸發(fā)哪些窗口,并且只有在產(chǎn)生由watermark觸發(fā)的所有輸出之后,watermark本身才會被發(fā)送到下游。 換句話說,由于出現(xiàn)水印而產(chǎn)生的所有元素將在水印之前發(fā)出。
同樣的規(guī)則適用于TwoInputStreamOperator。 但是,在這種情況下,操作算子的當(dāng)前watermark被定義為其兩個輸入的最小值。
要注意watermark指定延遲的話進(jìn)行不要太大,太大會導(dǎo)致結(jié)果刷新滯后太久。
數(shù)據(jù)上報有周期性間隔的話,要注意以心跳的形式發(fā)watermark,保證流程序繼續(xù)前進(jìn)。
上述就是小編為大家分享的watermark該怎么理解了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
標(biāo)題名稱:watermark該怎么理解
分享網(wǎng)址:http://aaarwkj.com/article20/gghcjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、面包屑導(dǎo)航、網(wǎng)站營銷、網(wǎng)站設(shè)計公司、小程序開發(fā)、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)