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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

文章目錄

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


時(shí)間語義

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

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

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

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

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

處理時(shí)間與事件時(shí)間的選擇

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

例如下面幾種場景:

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

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

    水位線(Watermarks)

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

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

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

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


    那么它是如何做到的呢?

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

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

    總結(jié)

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

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