国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flink之?dāng)?shù)據(jù)亂序處理

這篇具有很好參考價值的文章主要介紹了Flink之?dāng)?shù)據(jù)亂序處理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、數(shù)據(jù)為什么會亂序?

在了解為什么會亂序之前我們先來看一下在Flink中的時間語序。

1.1? Flink Time? 時間語義

  • Event Time:事件產(chǎn)生的時間,它通常由事件中的時間戳描述。

  • Ingestion Time:事件進(jìn)入Flink的時間。

  • Processing Time:事件被處理時當(dāng)前系統(tǒng)的時間。

這三種時間的對應(yīng)關(guān)系如下圖所示:

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

1.2? 數(shù)據(jù)亂序的產(chǎn)生

在使用EventTime處理Stream數(shù)據(jù)的時候就會遇到數(shù)據(jù)亂序的問題。流處理從Event(事件)產(chǎn)生,流經(jīng)Source,再到Operator,這中間需要一定的時間。雖然大部分情況下,傳輸?shù)絆perator的數(shù)據(jù)都是按照Event Time順序來的,但是也不排除因為網(wǎng)絡(luò)延遲等原因?qū)е聛y序的產(chǎn)生。特別是使用kafka的時候,多個分區(qū)間無法保證數(shù)據(jù)的有序性。

那么Flink針對亂序數(shù)據(jù)是如何處理的呢?

二、Flink是如何處理亂序數(shù)據(jù)的?

故事時間到~????

學(xué)校準(zhǔn)備春游,春游是大家小時候最愛的活動了。

小明班計劃的發(fā)車時間是09:00~09:10。

但是老師怕有同學(xué)遲到,趕不上一年一次的春游,所以讓司機大叔把他自己的表的時間調(diào)慢了五分鐘。(這樣實際發(fā)車時間是09:05~09:15)

果然早上的時候?qū)W校附近有條路突然開始維修,導(dǎo)致部分同學(xué)在規(guī)定時間內(nèi)無法到達(dá),不過還好老師有先見之明,讓司機大叔將表調(diào)慢了五分鐘,九點十五前陸陸續(xù)續(xù)到了一部分。

不過還是有小部分同學(xué)沒能在五分鐘內(nèi)趕到,也不能一直等著,所以老師便和司機大叔說先走但是前三分鐘開慢點,讓那些小部分已經(jīng)快趕到的同學(xué)打車追過來,這樣就也能上車了。

但總有一些家賊遠(yuǎn),或者路上堵住了等各種問題,導(dǎo)致又過了三分鐘還是沒追上,可是也不能不讓人家參加春游,畢竟一年一次,所以學(xué)校安排了備用車,送這些晚到很久的同學(xué)。最后,同學(xué)們都愉快的玩耍了起來。

總結(jié):

故事中的班車:同一個班級上同一輛班車,對應(yīng)的就是流式計算的窗口。

2.1 ?Flink為什么需要窗口計算?

我們知道在Flink的世界觀中一切都是由流組成的,離線的數(shù)據(jù)是有界流,實時的數(shù)據(jù)是無界流。我們需要的是通過計算數(shù)據(jù)匯總產(chǎn)生結(jié)果。就算是有界流也不可能一直等數(shù)據(jù),所以無論是有界流還是無界流就都需要規(guī)劃一個范圍來進(jìn)行計算,這就是所謂的窗口。

窗口就是將無界流或者大的有界流切割成小的有界流的一種方式,它會將數(shù)據(jù)分發(fā)到有限大小的桶中進(jìn)行分析。

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

2.2 Flink中的窗口

  • 時間窗口(Time Window)

  1. 滾動時間窗口

  2. 滑動時間窗口

  3. 會話窗口

  • 計數(shù)窗口 (Count Window)

  1. 滾動計數(shù)窗口

  2. 滑動計數(shù)窗口

2.2.1 滾動窗口

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

  • 將數(shù)據(jù)依據(jù)固定的窗口長度進(jìn)行切分;

  • 時間對齊,窗口長度固定,沒有重疊。

2.2.2 滑動窗口

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

  • 滑動窗口是固定窗口的更廣義的一種形式,滑動窗口由固定的窗口長度和滑動間隔組成;

  • 窗口長度固定,可以有間隔。

2.2.3 會話窗口

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

  • 由一系列事件組合一個特定時間長度的timeout間隙組成,也就是一段時間沒有接收到新數(shù)據(jù)就會生成新的窗口;

  • 時間無對齊。

2.3 如何進(jìn)行窗口計算?

進(jìn)行窗口計算,我們至少需要知道兩個條件:

  • 數(shù)據(jù)的產(chǎn)生時間即 EventTime?

  • 在窗口內(nèi)的數(shù)據(jù),何時觸發(fā)計算?

第一點很好解決,只需要在數(shù)據(jù)產(chǎn)生的時候?qū)r間戳帶過來就可以了。那么第二點,F(xiàn)link是如何判斷何時觸發(fā)窗口計算的呢?并且第一個窗口是什么時候生成的呢?

在回答這個問題之前,讓我們先來看一下以下三點:

2.3.1 有序事件

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

理想情況下,數(shù)據(jù)都是嚴(yán)格有序的,那么這個時候流式計算引擎選定窗口時間后,是可以正確的將窗口內(nèi)的數(shù)據(jù)計算出來的。然而理想很豐滿,現(xiàn)實很骨感,現(xiàn)實中的數(shù)據(jù)往往都存在亂序的情況。

2.3.2 無序事件

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

剛剛已經(jīng)知道了數(shù)據(jù)必然存在亂序的可能,因此Flink需要有一種機制能讓遲到的數(shù)據(jù)放在對應(yīng)的窗口中進(jìn)行計算。

還記得故事中,老師讓司機大叔將自己的表調(diào)慢五分鐘嗎?對應(yīng)的就是這種機制 Watermark -- 水位線。

2.3.3 Watermark -- 水位線

特點:

  • Watermark 是一個特殊的數(shù)據(jù),本質(zhì)上就是一個時間戳;

  • Watermark 必須單調(diào)遞增,以確保任務(wù)的事件時間時鐘一直在往前推進(jìn);

  • Watermark 與數(shù)據(jù)的時間戳有關(guān)。

為什么Watermark 能解決問題?

  • Watermark是一種告訴Flink一個消息延遲多少的方式,它定義了從什么時候開始可以不再等待更早的數(shù)據(jù);

  • 可以把Watermarks理解為一個水位線,這個Watermarks在不斷地變化。Watermark實際上作為數(shù)據(jù)流的一部分隨數(shù)據(jù)流流動;

  • 當(dāng)Flink中的運算符接收到Watermarks時,它明白早于該時間的消息已經(jīng)完全抵達(dá)計算引擎,即假設(shè)不會再有時間小于水位線的事件到達(dá);

  • 這個假設(shè)是觸發(fā)窗口計算的基礎(chǔ),只有水位線越過窗口對應(yīng)的結(jié)束時間,才會觸發(fā)窗口計算操作。

下圖詳解了watermark的工作流程:

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

如何防止數(shù)據(jù)丟失?

如果說故事中司機大叔故意將表調(diào)慢五分鐘,對應(yīng)的Flink設(shè)置水位線是防止數(shù)據(jù)短時間內(nèi)錯亂是第一道保險的話,那么老師讓司機大叔開車后的前三分鐘開慢點讓后面的同學(xué)可以坐出租車追上,對應(yīng)的就是Flink可以設(shè)置延遲時間,在延遲時間內(nèi)(也就是數(shù)據(jù)的watermark時間)亂序數(shù)據(jù)可以再次進(jìn)入對應(yīng)的窗口進(jìn)行計算便是Flink防止數(shù)據(jù)亂序的第二道保險。

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

?如果還有更晚到的數(shù)據(jù)呢?

對于實時數(shù)據(jù),我們不好肯定可容錯的水位線以及延遲時間可以防止所有晚到的數(shù)據(jù)進(jìn)入窗口計算。

從性能,從實時性考慮我們都不能將水位線或者延遲時間拉得太長。

水位線與延遲時間的設(shè)置只能是開發(fā)人員基于業(yè)務(wù),數(shù)據(jù)量,亂序的范圍等綜合考慮,是在不過多影響性能,實時性的前提下設(shè)計的。

那么更晚到的數(shù)據(jù)怎么辦呢?

就如同剛剛的故事中,學(xué)校讓更晚到的同學(xué)坐另一輛車去目的地一樣,F(xiàn)link對于更晚到的亂序數(shù)據(jù)的處理就是,將他們統(tǒng)一放入側(cè)輸出流中讓開發(fā)人員自行處理。

flink 亂序數(shù)據(jù)處理,大數(shù)據(jù)

三、總結(jié)

  1. 通過 assignTimestampsAndWatermarks 來設(shè)置水位線時間,讓短時間內(nèi)大量遲到的數(shù)據(jù)可以進(jìn)入對應(yīng)的窗口,當(dāng)水位線時間漫過窗口時間,開始觸發(fā)窗口操作。

  2. 通過 allowedLateness 來設(shè)置延遲時間,讓在延遲時間內(nèi)遲到的數(shù)據(jù)可以進(jìn)入窗口計算。

  3. 通過 sideOutputLateData 來設(shè)置側(cè)輸出流進(jìn)行兜底,讓更晚到的數(shù)據(jù)進(jìn)入側(cè)輸出流中。

Flink最終就是用這一套組合拳來處理亂序數(shù)據(jù)的。? ? ?

Flink不同操作是可以分區(qū)的,那么在分區(qū)時watermark是如何傳遞的呢?大家可以結(jié)合實踐好好思考下~

本期內(nèi)容就到這里了,如果喜歡就點個關(guān)注吧,微信公眾號搜索“數(shù) 新 網(wǎng) 絡(luò) 科 技 號”可查看更多精彩內(nèi)容~文章來源地址http://www.zghlxwxcb.cn/news/detail-730213.html

到了這里,關(guān)于Flink之?dāng)?shù)據(jù)亂序處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 大數(shù)據(jù)Flink(六十一):Flink流處理程序流程和項目準(zhǔn)備

    大數(shù)據(jù)Flink(六十一):Flink流處理程序流程和項目準(zhǔn)備

    文章目錄 Flink流處理程序流程和項目準(zhǔn)備 一、Flink流處理程序的一般流程

    2024年02月11日
    瀏覽(28)
  • Flink實時大數(shù)據(jù)處理性能測試

    Flink是一個開源的流處理框架,用于實時大數(shù)據(jù)處理。它可以處理大量數(shù)據(jù),提供低延遲和高吞吐量。Flink的性能測試是一項重要的任務(wù),可以幫助我們了解其在實際應(yīng)用中的表現(xiàn)。在本文中,我們將討論Flink實時大數(shù)據(jù)處理性能測試的背景、核心概念、算法原理、代碼實例、

    2024年03月18日
    瀏覽(27)
  • Flink流處理案例:實時數(shù)據(jù)聚合

    Apache Flink是一個流處理框架,可以處理大規(guī)模數(shù)據(jù)流,實現(xiàn)實時數(shù)據(jù)處理和分析。Flink支持各種數(shù)據(jù)源和接口,如Kafka、HDFS、TCP流等,可以實現(xiàn)高吞吐量、低延遲的流處理。 在本文中,我們將通過一個實際的Flink流處理案例來講解Flink的核心概念、算法原理和最佳實踐。我們將

    2024年02月19日
    瀏覽(23)
  • Flink 算子:數(shù)據(jù)處理的魔法師

    Flink 算子:數(shù)據(jù)處理的魔法師

    用戶通過算子能將一個或多個 DataStream 轉(zhuǎn)換成新的 DataStream,在應(yīng)用程序中可以將多個數(shù)據(jù)轉(zhuǎn)換算子合并成一個復(fù)雜的數(shù)據(jù)流拓?fù)洹?這部分內(nèi)容將描述 Flink DataStream API 中基本的數(shù)據(jù)轉(zhuǎn)換 API,數(shù)據(jù)轉(zhuǎn)換后各種數(shù)據(jù)分區(qū)方式,以及算子的鏈接策略。 1. Map : 輸入一個元素同時輸

    2024年01月22日
    瀏覽(22)
  • Flink流處理案例:實時數(shù)據(jù)去重

    在大數(shù)據(jù)處理領(lǐng)域,實時數(shù)據(jù)流處理是一項至關(guān)重要的技術(shù),可以幫助我們實時分析和處理數(shù)據(jù),從而更快地做出決策。Apache Flink是一款流處理框架,具有高性能和低延遲的特點,可以處理大規(guī)模的實時數(shù)據(jù)流。在本文中,我們將討論Flink流處理的一個案例,即實時數(shù)據(jù)去重

    2024年04月27日
    瀏覽(43)
  • 【大數(shù)據(jù)】Flink 架構(gòu)(三):事件時間處理

    【大數(shù)據(jù)】Flink 架構(gòu)(三):事件時間處理

    《 Flink 架構(gòu) 》系列(已完結(jié)),共包含以下 6 篇文章: Flink 架構(gòu)(一):系統(tǒng)架構(gòu) Flink 架構(gòu)(二):數(shù)據(jù)傳輸 Flink 架構(gòu)(三):事件時間處理 Flink 架構(gòu)(四):狀態(tài)管理 Flink 架構(gòu)(五):檢查點 Checkpoint(看完即懂) Flink 架構(gòu)(六):保存點 Savepoint ?? 如果您覺得這篇

    2024年02月21日
    瀏覽(18)
  • flink數(shù)據(jù)延遲原因及詳細(xì)處理方案

    數(shù)據(jù)輸入環(huán)節(jié)問題:可能是數(shù)據(jù)來源的數(shù)據(jù)增長速度過快,導(dǎo)致flink消費者處理數(shù)據(jù)的速度跟不上數(shù)據(jù)生成的速度。解決方案:增加flink消費者的并發(fā)度,使用分區(qū)和并行流的方式來處理數(shù)據(jù),以保證消費者可以快速地處理大量的數(shù)據(jù)。 數(shù)據(jù)輸出環(huán)節(jié)問題:可能是flink消費者完

    2024年02月13日
    瀏覽(20)
  • 使用Flink處理Kafka中的數(shù)據(jù)

    目錄 ????????使用Flink處理Kafka中的數(shù)據(jù) 前提: ?一,?使用Flink消費Kafka中ProduceRecord主題的數(shù)據(jù) 具體代碼為(scala) 執(zhí)行結(jié)果 二, 使用Flink消費Kafka中ChangeRecord主題的數(shù)據(jù)? ?????????具體代碼(scala) ????????????????具體執(zhí)行代碼① ? ? ? ????????? 重要邏

    2024年01月23日
    瀏覽(20)
  • 數(shù)據(jù)流處理框架Flink與Kafka

    在大數(shù)據(jù)時代,數(shù)據(jù)流處理技術(shù)已經(jīng)成為了一種重要的技術(shù)手段,用于處理和分析大量實時數(shù)據(jù)。Apache Flink和Apache Kafka是兩個非常重要的開源項目,它們在數(shù)據(jù)流處理領(lǐng)域具有廣泛的應(yīng)用。本文將深入探討Flink和Kafka的關(guān)系以及它們在數(shù)據(jù)流處理中的應(yīng)用,并提供一些最佳實踐

    2024年04月23日
    瀏覽(27)
  • 從批處理到實時處理:Flink的數(shù)據(jù)處理變革和API擴展

    作者:禪與計算機程序設(shè)計藝術(shù) Apache Flink是一個開源的分布式流處理平臺,它由Apache Software Foundation(ASF)開發(fā)并于2015年9月發(fā)布。Apache Flink支持多種編程語言如Java、Scala、Python等進(jìn)行編寫,并且提供豐富的API接口方便用戶進(jìn)行數(shù)據(jù)處理。Flink的系統(tǒng)架構(gòu)主要包括:JobManager、

    2024年02月12日
    瀏覽(36)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包