溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Flink Client、Window Time & WaterMarker的示例分析

發(fā)布時間:2021-12-31 10:32:07 來源:億速云 閱讀:174 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹Flink Client、Window Time & WaterMarker,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Flink 客戶端

Flink Client:

  1. Scala shell

  2. SQL Client

  3. Command line

  4. Restfull

  5. Web

命令行說明:
Standalone模式

#查看命令完整說明  
flink -h 
#查看命令參數(shù)說明
flink run -h   
#啟動一個standalone集群
bin/start-cluster.sh
#運行job
flink run -d examples/streaming/TopSpeedWindowing.jar 
#查看任務(wù)列表
flink list -m 127.0.0.1:8081
#停止指定任務(wù),任務(wù)的source需實現(xiàn)StoppableFunction函數(shù) 
flink stop -m 127.0.0.1:8081 d67420e52bd051fae2fddbaa79e046bb 
#取消指定任務(wù),如果conf/flink-conf.yaml配置了state.savepoints.dir 會保存savepoint, 否則不會保存savepoint
flink cancel -m 127.0.0.1:8081 5e20cb6b0f357591171dfcca2eea09de 
#觸發(fā) Savepoint
flink savepoint -m 127.0.0.1:8081 ec53edcfaeb96b2a5dadbfbe5ff62bbb /tmp/savepoint
#從指定的savepoint啟動
flink run -d -s /tmp/savepoint/savepoint-f049ff-24ec0d3e0dc7
#info查看執(zhí)行計劃(StreamGraph)
flink info examples/streaming/TopSpeedWindowing.jar
##拷貝輸出的 Json 內(nèi)容,粘貼到這個網(wǎng)站:http://flink.apache.org/visualizer/

Yarn Per-Job模式(每個Job啟動一個flink cluster)

#單任務(wù)attach模式,客戶端會一直等待任務(wù)結(jié)束才退出
flink run -m yarn-cluster ./examples/batch/WordCount.jar
# Yarn上顯示flink session cluster

#單任務(wù)detached模式,客戶端提交完任務(wù)就退出
flink run -yd -m yarn-cluster ./examples/streaming/TopSpeedWindowing.jar
# Yarn上顯示flink per-job cluster

Yarn Session模式(多個Job運行在一個Flink cluster)

#啟動session
yarn-session.sh -tm 2048 -s 3 tm內(nèi)存2g, 每個tm有3個slot
默認atache模式, 加-d為detache模式  Yarn顯示為flink session cluster

#提交任務(wù)
flink run ./examples/batch/WordCount.jar
將會根據(jù) /tmp/.yarn-properties-admin 文件內(nèi)容提交到了剛啟動的 Session。

#提交到指定的session 通過 -yid 參數(shù)來提交到指定的 Session
flink run -d -p 30 -m yarn-cluster -yid application_1532332183347_0708 ./examples/streaming/TopSpeedWindowing.jar

Savepoint 與 Checkpoint區(qū)別:

  1. Checkpoint是增量做的,每次時間短,數(shù)據(jù)量小,只要在程序里啟用后會自動觸發(fā),用戶無須感知;Checkpoint是作業(yè)failover的時候自動調(diào)用,不需用戶指定

  2. <font size=2>Savepoint是全量做的,每次時間較長,數(shù)據(jù)量大,需用戶主動觸發(fā),Savepoint通常用于程序版本更新,Bug修復(fù) A/B Test等場景,需用戶指定.</font>

Restfull API提交方式: https://ci.apache.org/projects/flink/flink-docs-stable/monitoring/rest_api.html

Flink Window&Time

Window 可以將無限流切分成有限流,是處理有限流核心組件.將流拆分成一個個buckets, 可以在buckets里進行計算

Flink中window分為時間驅(qū)動(Time Window)和數(shù)據(jù)驅(qū)動(Count Window)兩種.

window方法入?yún)indowAssigner, WindowAssigner 負責(zé)將每條輸入的數(shù)據(jù)分發(fā)到正確的 window 中(一條數(shù)據(jù)可能同時分發(fā)到多個 Window 中),F(xiàn)link 提供了幾種通用的 WindowAssigner:tumbling window(窗口間的元素?zé)o重復(fù)),sliding window(窗口間的元素可能重復(fù)),session window 以及 global window。如果需要自己定制數(shù)據(jù)分發(fā)策略,則可以實現(xiàn)一個 class,繼承自 WindowAssigner

窗口生命周期

簡言之,只要屬于此窗口的第一個元素到達,就會創(chuàng)建一個窗口,當時間(事件或處理時間)超過其結(jié)束時間戳加上用戶指定的允許延遲時,窗口將完全刪除

窗口組件
  • window assigner: 用來決定某個元素被分配到哪個/哪些窗口中

  • Trigger: 觸發(fā)器,決定一個窗口何時能夠被計算或移除。觸發(fā)策略可能類似于“當窗口元素數(shù)量大于4”時或“當水位線通過窗口結(jié)束時”

  • Evictor: 它可以在觸發(fā)器觸發(fā)后&應(yīng)用函數(shù)之前/或之后從窗口中刪除元素。

窗口分類
  • 翻滾窗口(Tumbling window 無重疊)

  • 滾動窗口(Sliding window 有重疊)

  • 會話窗口(Session window 活動間隙)

WaterMarker

WaterMarker是Apache Flink為了處理Event Time窗口計算提出的一種機制,本質(zhì)上也是一種時間戳。 用于處理亂序事件或延遲數(shù)據(jù),這通常用watermark機制結(jié)合window來實現(xiàn)(Watermark用來觸發(fā)window窗口計算

窗口觸發(fā)條件

1. 對于out-of-order(無序)及正常數(shù)據(jù)

  • watermark時間戳 > = window endtime

  • 在[window_start_time, window_end_time]中數(shù)據(jù)存在

2. 對于late element(延遲)太多的數(shù)據(jù)

  • event time > watermark時間戳

WaterMark設(shè)定方法

1. 標點水位線

標點水位線(Punctuated Watermark)通過數(shù)據(jù)流中某些特殊標記事件來觸發(fā)新水位線的生成。這種方式下窗口的觸發(fā)與時間無關(guān),而是決定于何時收到標記事件

在實際的生產(chǎn)中Punctuated方式在TPS很高的場景下會產(chǎn)生大量的Watermark在一定程度上對下游算子造成壓力,所以只有在實時性要求非常高的場景才會選擇Punctuated的方式進行Watermark的生成。

2. 定期水位線

周期性的(允許一定時間間隔或者達到一定的記錄條數(shù))產(chǎn)生一個Watermark。水位線提升的時間間隔是由用戶設(shè)置的,在兩次水位線提升時隔內(nèi)會有一部分消息流入,用戶可以根據(jù)這部分數(shù)據(jù)來計算出新的水位線。

在實際的生產(chǎn)中Periodic的方式必須結(jié)合時間和積累條數(shù)兩個維度繼續(xù)周期性產(chǎn)生Watermark,否則在極端情況下會有很大的延時。

舉個例子,最簡單的水位線算法就是取目前為止最大的事件時間,然而這種方式比較暴力,對亂序事件的容忍程度比較低,容易出現(xiàn)大量遲到事件。

遲到事件

遲到事件是不可避免的,元素到來時窗口已經(jīng)關(guān)閉了

1. 通常處理的方法有3種:

  • 重新激活已經(jīng)關(guān)閉的窗口并重新計算以修正結(jié)果。

  • 將遲到事件收集起來另外處理。

  • 將遲到事件視為錯誤消息并丟棄。
    ps: flink默認采用第3種丟棄方式,也支持side output 和 allowed lateness

2. Side Output

side output機制可以將遲到事件單獨放入一個數(shù)據(jù)流分支,這會作為 window 計算結(jié)果的副產(chǎn)品,以便用戶獲取并對其進行特殊處理

3. Allowed lateness

Allowed Lateness機制允許用戶設(shè)置一個允許的最大遲到時長。Flink 會在窗口關(guān)閉后一直保存窗口的狀態(tài)直至超過允許遲到時長,這期間的遲到事件不會被丟棄,而是默認會觸發(fā)窗口重新計算。因為保存窗口狀態(tài)需要額外內(nèi)存,并且如果窗口計算使用了 ProcessWindowFunction API 還可能使得每個遲到事件觸發(fā)一次窗口的全量計算,代價比較大,所以允許遲到時長不宜設(shè)得太長,遲到事件也不宜過多,否則應(yīng)該考慮降低水位線提高的速度或者調(diào)整算法。

總結(jié)
  • 窗口window 的作用是為了周期性的獲取數(shù)據(jù)。

  • watermark的作用是防止數(shù)據(jù)出現(xiàn)亂序(經(jīng)常),事件時間內(nèi)獲取不到指定的全部數(shù)據(jù),而做的一種保險方法。

  • allowLateNess是將窗口關(guān)閉時間再延遲一段時間。

  • sideOutPut是最后兜底操作,所有過期延遲數(shù)據(jù),指定窗口已經(jīng)徹底關(guān)閉了,就會把數(shù)據(jù)放到側(cè)輸出流。

以上是“Flink Client、Window Time & WaterMarker”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI