您好,登錄后才能下訂單哦!
這篇文章主要介紹Flink Client、Window Time & WaterMarker,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Flink Client:
Scala shell
SQL Client
Command line
Restfull
Web
命令行說明:
Standalone模式
#查看命令完整說明 flink -h #查看命令參數說明 flink run -h #啟動一個standalone集群 bin/start-cluster.sh #運行job flink run -d examples/streaming/TopSpeedWindowing.jar #查看任務列表 flink list -m 127.0.0.1:8081 #停止指定任務,任務的source需實現StoppableFunction函數 flink stop -m 127.0.0.1:8081 d67420e52bd051fae2fddbaa79e046bb #取消指定任務,如果conf/flink-conf.yaml配置了state.savepoints.dir 會保存savepoint, 否則不會保存savepoint flink cancel -m 127.0.0.1:8081 5e20cb6b0f357591171dfcca2eea09de #觸發 Savepoint flink savepoint -m 127.0.0.1:8081 ec53edcfaeb96b2a5dadbfbe5ff62bbb /tmp/savepoint #從指定的savepoint啟動 flink run -d -s /tmp/savepoint/savepoint-f049ff-24ec0d3e0dc7 #info查看執行計劃(StreamGraph) flink info examples/streaming/TopSpeedWindowing.jar ##拷貝輸出的 Json 內容,粘貼到這個網站:http://flink.apache.org/visualizer/
Yarn Per-Job模式(每個Job啟動一個flink cluster)
#單任務attach模式,客戶端會一直等待任務結束才退出 flink run -m yarn-cluster ./examples/batch/WordCount.jar # Yarn上顯示flink session cluster #單任務detached模式,客戶端提交完任務就退出 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內存2g, 每個tm有3個slot 默認atache模式, 加-d為detache模式 Yarn顯示為flink session cluster #提交任務 flink run ./examples/batch/WordCount.jar 將會根據 /tmp/.yarn-properties-admin 文件內容提交到了剛啟動的 Session。 #提交到指定的session 通過 -yid 參數來提交到指定的 Session flink run -d -p 30 -m yarn-cluster -yid application_1532332183347_0708 ./examples/streaming/TopSpeedWindowing.jar
Savepoint 與 Checkpoint區別:
Checkpoint是增量做的,每次時間短,數據量小,只要在程序里啟用后會自動觸發,用戶無須感知;Checkpoint是作業failover的時候自動調用,不需用戶指定
<font size=2>Savepoint是全量做的,每次時間較長,數據量大,需用戶主動觸發,Savepoint通常用于程序版本更新,Bug修復 A/B Test等場景,需用戶指定.</font>
Restfull API提交方式: https://ci.apache.org/projects/flink/flink-docs-stable/monitoring/rest_api.html
Window 可以將無限流切分成有限流,是處理有限流核心組件.將流拆分成一個個buckets, 可以在buckets里進行計算
Flink中window分為時間驅動(Time Window)和數據驅動(Count Window)兩種.
window方法入參WindowAssigner, WindowAssigner 負責將每條輸入的數據分發到正確的 window 中(一條數據可能同時分發到多個 Window 中),Flink 提供了幾種通用的 WindowAssigner:tumbling window(窗口間的元素無重復),sliding window(窗口間的元素可能重復),session window 以及 global window。如果需要自己定制數據分發策略,則可以實現一個 class,繼承自 WindowAssigner
簡言之,只要屬于此窗口的第一個元素到達,就會創建一個窗口,當時間(事件或處理時間)超過其結束時間戳加上用戶指定的允許延遲時,窗口將完全刪除
window assigner: 用來決定某個元素被分配到哪個/哪些窗口中
Trigger: 觸發器,決定一個窗口何時能夠被計算或移除。觸發策略可能類似于“當窗口元素數量大于4”時或“當水位線通過窗口結束時”
Evictor: 它可以在觸發器觸發后&應用函數之前/或之后從窗口中刪除元素。
翻滾窗口(Tumbling window 無重疊)
滾動窗口(Sliding window 有重疊)
會話窗口(Session window 活動間隙)
WaterMarker是Apache Flink為了處理Event Time窗口計算提出的一種機制,本質上也是一種時間戳。 用于處理亂序事件或延遲數據,這通常用watermark機制結合window來實現(Watermark用來觸發window窗口計算
watermark時間戳 > = window endtime
在[window_start_time, window_end_time]中數據存在
event time > watermark時間戳
標點水位線(Punctuated Watermark)通過數據流中某些特殊標記事件來觸發新水位線的生成。這種方式下窗口的觸發與時間無關,而是決定于何時收到標記事件
在實際的生產中Punctuated方式在TPS很高的場景下會產生大量的Watermark在一定程度上對下游算子造成壓力,所以只有在實時性要求非常高的場景才會選擇Punctuated的方式進行Watermark的生成。
周期性的(允許一定時間間隔或者達到一定的記錄條數)產生一個Watermark。水位線提升的時間間隔是由用戶設置的,在兩次水位線提升時隔內會有一部分消息流入,用戶可以根據這部分數據來計算出新的水位線。
在實際的生產中Periodic的方式必須結合時間和積累條數兩個維度繼續周期性產生Watermark,否則在極端情況下會有很大的延時。
舉個例子,最簡單的水位線算法就是取目前為止最大的事件時間,然而這種方式比較暴力,對亂序事件的容忍程度比較低,容易出現大量遲到事件。
遲到事件是不可避免的,元素到來時窗口已經關閉了
重新激活已經關閉的窗口并重新計算以修正結果。
將遲到事件收集起來另外處理。
將遲到事件視為錯誤消息并丟棄。
ps: flink默認采用第3種丟棄方式,也支持side output 和 allowed lateness
side output機制可以將遲到事件單獨放入一個數據流分支,這會作為 window 計算結果的副產品,以便用戶獲取并對其進行特殊處理
Allowed Lateness機制允許用戶設置一個允許的最大遲到時長。Flink 會在窗口關閉后一直保存窗口的狀態直至超過允許遲到時長,這期間的遲到事件不會被丟棄,而是默認會觸發窗口重新計算。因為保存窗口狀態需要額外內存,并且如果窗口計算使用了 ProcessWindowFunction API 還可能使得每個遲到事件觸發一次窗口的全量計算,代價比較大,所以允許遲到時長不宜設得太長,遲到事件也不宜過多,否則應該考慮降低水位線提高的速度或者調整算法。
窗口window 的作用是為了周期性的獲取數據。
watermark的作用是防止數據出現亂序(經常),事件時間內獲取不到指定的全部數據,而做的一種保險方法。
allowLateNess是將窗口關閉時間再延遲一段時間。
sideOutPut是最后兜底操作,所有過期延遲數據,指定窗口已經徹底關閉了,就會把數據放到側輸出流。
以上是“Flink Client、Window Time & WaterMarker”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。