真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Flink中時間的示例分析

這篇文章給大家分享的是有關Flink中時間的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司作為成都網站建設公司,專注網站建設公司、網站設計,有關企業(yè)網站建設方案、改版、費用等問題,行業(yè)涉及成都廣告推廣等多個領域,已為上千家企業(yè)服務,得到了客戶的尊重與認可。

一,fink支持的時間

Flink的流式應用支持不同的時間觀。

1,處理時間

處理時間是指執(zhí)行相應操作的機器的系統(tǒng)時間。

當流程序采用處理時間運行時,所有基于時間的操作(如時間窗口)將使用運行各自運算符的機器的系統(tǒng)時鐘。例如,每小時處理時間窗口將包括在系統(tǒng)時鐘顯示一個小時的時間之間到達特定操作之間的所有記錄。

處理時間是最簡單的時間概念,不需要流和機器之間的協(xié)調。它提供最好的性能和最低的延遲。然而,在分布式和異步環(huán)境中,處理時間不能提供決定論,因為它易受記錄到達系統(tǒng)(例如從消息隊列)到達的速度的影響,也與記錄在系統(tǒng)內部的操作算子之間流動的速度有關。

2,事件時間

事件時間是每個事件在其生產設備上發(fā)生的時間。這個時間通常是嵌入在事件中他們進入fink和事件的時間戳可以從事件中提取。每小時事件時間窗口將包含所有事件,該事件都包含到該時間的事件時間戳,而不管事件何時到達,以及它們到達的順序。

事件時間給出正確的結果,即使在亂序的事件,遲滯的事件,或從備份或持久的日志的回放數(shù)據。使用事件時間,時間的進展取決于數(shù)據,而不是墻上的時鐘。事件時間程序必須指定如何生成事件時間Watermarks,這是在事件時間內發(fā)出信號的機制。該機制如下所述。

事件時間處理通常會產生一定的延遲,這是因為它具有等待后期事件和無序事件的特定時間的特性。因此,基于事件間的程序常常與處理時間操作相結合。

3,注入時間

   注入時間是指事件進入flink的時間。在Sources操作符中每條事件都會獲取Sources的當前時間作為時間戳,基于時間的操作(比如windows)會依據這個時間戳。

   注入時間在概念上在事件時間和處理時間之間。與處理時間相比,它稍微更消耗性能些,但是卻提供了可預測的結果。因為注入時間使用固定的時間戳(在Sources處一次分配),不同的窗口操作都會使用相同的時間,而使用處理時間每個窗口操作,都可能分配給消息不同的時間窗口(基于本地系統(tǒng)時間)。

   與事件時間相比,注入時間程序不能處理任何無需時間或者滯后數(shù)據,但是程序不需要指定如何生成watermark。

   在內部,注入時間和事件時間非常相似,但是注入時間有自動時間戳分配和自動watermark生成的功能。

Flink中時間的示例分析

二,設定時間特性

一個flink流程序第一部分往往是設置基礎時間特性。該設置確定了流的Sources頭如何操作(比如是否分配一個時間戳)與此同時確認窗口操作(如KeyedStream.timeWindow(Time.seconds(30)).)如何使用時間的概念。

下面的flink程序展示了以小時時間窗口聚合事件。窗口的行為與時間特性相互適應。

finalStreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);

// alternatively:
// env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);
// env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

DataStream stream = env.addSource(newFlinkKafkaConsumer09(topic, schema, props));

stream
  .keyBy( (event) -> event.getUser() )
  .timeWindow(Time.hours(1))
  .reduce( (a, b) -> a.add(b) )
  .addSink(...);

注意,為了使用事件時間來運行這個例子,程序使用Sources來直接定義數(shù)據的事件時間和決定watermark,或者程序在Sources后必須注入一個Timestamp Assigner & Watermark Generator。這些功能主要描述了如何去使用事件時間戳,和事件流展示出來的無序程度。

下面的部分描述了在時間戳和watermark的一般機制。為指導如何在數(shù)據流API的使用時間戳分配和Flink watermark生成,后面會出文章介紹。

三,事件時間和watermark

   支持事件時間的流處理器需要一種方法來測量時間時間的進展。例如,一個小時窗口windows的操作,當事件時間已經超過一個小時的時候需要通知該操作算子,以便操作算子可以關閉正在進行中的窗口。

   事件時間可以獨立于處理時間前進。例如在一個程序中,操作算子的當前事件時間可能稍微落后于處理時間(收到事件延遲導致),而兩者都以相同的速度進行。另一方面,另一個流程序可能只需要幾秒鐘的處理時間就可以處理通過幾周的事件時間,通過快速處理一些已經緩存在kafka主題(或者另外的消息隊列)中的歷史數(shù)據。

   Flink中使用watermark去測量事件時間的進度。Watermark 流作為數(shù)據流的一部分,攜帶一個時間戳 t。一個Watermark(t) 聲明事件時間已經到達時間t,意味著已經沒有事件時間t1

   如下圖:

Flink中時間的示例分析

Watermark對于無序流是至關重要的,如下圖所示,事件不是根據時間戳排序。一般來說,watermark是一個聲明,通過流中的那個點,所有到達某個時間戳的時間應該已經到達,一旦watermark到達操作算子,操作算子就可以提升內部時間到watermark所指定的值。

Flink中時間的示例分析

四,在并行流中的watermark

   Watermark是在Source函數(shù)中直接或者在其后直接生成。一個源函數(shù)的每個并行子任務通常獨立的產生watermark。這些watermark定義了特定并行源的事件時間。

   當watermark流經流程序時,會調整操作算子中的事件時間至watermark到達的時間。每當操作算子提前它自己的事件時間時,它就會為后繼的操作算子生成一個新的下行watermark。

   一些操作算子使用多個輸入流。例如,union操作,或者keyBy(...)或partition(...)之后的操作.這些操作算子的當前事件時間是所有輸入流最小的事件時間。當輸入流更新它們的事件時間時,操作算子也會更新。

   下圖顯示了,流經并行流的事件和watermark,以及跟蹤事件時間的運算符。

Flink中時間的示例分析

五,遲滯元素

   也可能存在違反watermark條件的元素,也即在Watermark(t) 已經發(fā)生以后,很多時間戳t1

   鑒于這個原因,流式程序可能明確的期待一些延遲的元素。后面會出文章,詳細介紹如何在事件時間窗口中處理延遲元素。

六,對比Spark Streaming

   對比Spark Streaming可以知道,我們的Spark Streaming支持的時間是處理時間,這在現(xiàn)實生活中,尤其是基于時間序列的事件處理的時候,就略顯不足了。所以,在選用流式處理的時候,要結合自己的業(yè)務需要。

感謝各位的閱讀!關于“Flink中時間的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


當前名稱:Flink中時間的示例分析
路徑分享:http://weahome.cn/article/ihoosj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部