日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flink 时间语义与水位线(Watermarks)

發(fā)布時間:2024/4/11 编程问答 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flink 时间语义与水位线(Watermarks) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 時間語義
  • 水位線(Watermarks)


時間語義

對于流式數(shù)據(jù)處理,最大的特點就是數(shù)據(jù)上具有時間的屬性特征,Flink根據(jù)時間產(chǎn)生的位置不同,將時間區(qū)分為如下三種時間概念

  • 事件時間(Event Time):數(shù)據(jù)流事件實際發(fā)生的時間。
  • 接入時間(Ingestion Time):數(shù)據(jù)進入Flink系統(tǒng)的時間。
  • 處理時間(Processing Time):當前流處理算子所在機器上的本地時鐘時間。

時間與事件的關(guān)系

Flink中 默認使用的是處理時間,但是在大多數(shù)情況下都會使用事件時間** (即實際事件的發(fā)生點,也符合事件發(fā)生進而分析的邏輯),一般只有在Event Time無法使用的情況下才會使用接入時間和處理時間,因此我們可以通過調(diào)用執(zhí)行環(huán)境的setStreamTimeCharacteristic方法來指定時間語義

//創(chuàng)建執(zhí)行環(huán)境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//設(shè)置指定的時間語義,如下面的設(shè)置為EventTime env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

處理時間與事件時間的選擇

在大部分場景由于我們需要依據(jù)事件發(fā)生的順序來進行邏輯處理,因此都會使用事件時間。但是在一些特殊場景下,考慮到事件數(shù)據(jù)數(shù)據(jù)亂序到達以及延遲到達等問題,為了保證實時性和低延遲,處理時間就會派上用場。

例如下面幾種場景:

  • 更重視處理速度而非準確性的應(yīng)用。
  • 需要周期性實時報告結(jié)果而無論其準確性(如實時監(jiān)控儀表盤)。
  • 因此,對比處理時間和事件時間得出結(jié)論:

    • 處理時間提供了低延遲,但是它的結(jié)果依賴處理速度,因此具有不確定性。
    • 事件時間則與之相反,能夠保證結(jié)果的準確性,并允許你處理延遲甚至無序的事件。

    水位線(Watermarks)

    在理想狀態(tài)下,事件數(shù)據(jù)都是按照事件產(chǎn)生的時間順序傳輸至Flink系統(tǒng)中。但事實上,由于網(wǎng)絡(luò)或者分布式系統(tǒng)等外部因素的影響下,事件數(shù)據(jù)往往不能及時傳輸,導(dǎo)致系統(tǒng)的不穩(wěn)定而造成數(shù)據(jù)亂序到達或者延遲到達等情況。

    亂序數(shù)據(jù)的影響

    一旦出現(xiàn)這種問題,如果我們嚴格按照Event Time來決定窗口的運行,我們既不能保證屬于該窗口的數(shù)據(jù)已經(jīng)全部到達,也不能無休止的等待延遲到達的數(shù)據(jù),因此我們需要一種機制來控制數(shù)據(jù)處理的進度,這就是水位線(Watermarks)機制

    水位線是一個全局的進度指標,它能夠衡量數(shù)據(jù)處理進度 (表達數(shù)據(jù)到達的完整性),保證事件數(shù)據(jù)全部到達Flink系統(tǒng),即使數(shù)據(jù)亂序或者延遲到達,也能夠像預(yù)期一樣計算出正確和連續(xù)的結(jié)果。


    那么它是如何做到的呢?

    • Flink會使用最新的事件時間減去固定時間間隔作為水位線,該時間時間為用戶外部配置的支持最大延遲到達的時間長度。
    • 當一個算子接收到一個時間為T的水位線,就可以認為不會再收到任何時間戳小于或等于T的事件了(遲到事件或異常事件)
    • 水位線其實就相當于一個提示算子的信號,當水位線時間戳大于時間窗口的結(jié)束時間,且窗口中含有事件數(shù)據(jù)時,此時算子就會認為某個特定時間區(qū)間的時間戳已經(jīng)全部到齊,立即開始觸發(fā)窗口計算或?qū)邮盏臄?shù)據(jù)進行排序。

    從上面我們可以看出,水位線其實就是在結(jié)果的準確性和延遲之間做出取舍,它雖然保證了低延遲,但是伴隨而來的卻是低可信度。倘若我們要保證后續(xù)的延遲事件不丟失,就必須額外增加一些代碼來處理他們,但是如果采用這種保守的機制,雖然可信度低高了,但是延遲又會繼續(xù)增加,因此延遲和可信無法做到兩全其美,需要我們依據(jù)具體場景來自己平衡。

    總結(jié)

    以上是生活随笔為你收集整理的Flink 时间语义与水位线(Watermarks)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。