您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關flink的DataStream應該學習哪些內容,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
flink作為目前比較火的流處理引擎,學好還是很有必要的,但是很多人喜歡問浪尖flink會不會超越spark,我覺得短期內還是不會,而且spark 批處理領域還是很高效靠譜的。但是作為大數據開發者,spark和flink并不是必須二選一的,而是都要掌握,所以也不用再問浪尖,關于是否直接跳過spark 直接學習flink這類問題了,沒意義。
flink的處理模型可以分為基于事件驅動的處理和基于時間的處理模型,基于時間的處理模型又可以分為基于事件時間和處理時間(注入時間就是一種特殊的事件時間)。
1.runtime
必須要先非常了解flink的runtime機制,拓撲結構相關的如并行度設置,task劃分原則,task鏈式原理,slot共享機制等。
關于flink的runtime可以參考浪尖前面的文章
結合Spark講一下Flink的runtime
要理解這個其實可以參考Spark Streaming和Structured Steaming的運行模型和flink的區別。可以參考
Spark Streaming VS Flink
Structured Streaming VS Flink
這樣便于我們了解flink內部運行原理,數據流動方式,shuffle機制,狀態管理等,有助于數據傾斜調優,并行度設置,監控告警系統設計。最終才能做好一個比較穩定的應用程序。
2.事件處理
事件驅動處理模型,這個是實時處理的典型代表,就這點來說spark的流處理引擎確實比不上,因為其是基于處理時間的微批處理(當然,structured Streaming也支持基于事件時間的處理模型)。
對于flink的事件處理來說,除了前面所說的runtime,還要搞清楚flink datastream的事件時間機制,watermark生成器,并行度原理,shuffle劃分,數據流動原理,狀態管理及超時key狀態刪除等這幾個非常重要的內容。這樣便于理解數據在flink運行時內部流動過程,狀態在flink自任務存儲的過程,然后數據傾斜與否,狀態過期刪除及主要是數據傾斜及狀態管理吧,這個是flink任務調優的。
當然,flink還是有很多比較騷的操作的,比如下面幾篇文章:
flink的神奇分流器-sideoutput -可以實現數據分流處理。
Flink迭代操作末文-迭代流 -迭代計算處理。
flink一次對整個窗口進行聚合操作-ProcessWindowFunction -
也即是process這類底層的api,可以對狀態及時間進行更精細的草走,甚至可以自己實現自己的會話窗口。
Flink異步IO第一講 -異步IO 可以實現更加高效的維表join操作。
這些小技巧還是很有必要的掌握的。
3. 窗口函數
主要是這個分為基于事件時間的窗口函數和基于處理時間的窗口函數。窗口函數又分為會話窗口函數,滑動時間窗口,滾動時間窗口。更騷的操做是更底層的窗口處理函數及窗口處理機制也即是ProcessFunction和ProcessWindowFunction,便于我們獲取更深層次的狀態和時間。
剩下的還有就是窗口的join操作:
滾動窗口join
滑動窗口join
會話窗口join
inerval join
有事件時間必然有事件延遲處理,如何處理基于事件時間的窗口函數延遲事件這個是令人頭疼的問題。當然,對于編碼來說還是可以很好的對延遲事件進行處理的,比如結合側輸出,watermark,延遲時間等。
4.邊緣生態
常用的flink邊緣生態,數據源是kafka,批處理的話是hdfs上數據,然后sink是hbase,mysql,hbase,mongodb。
5.實現案例
下面,浪尖在星球里分享的相關源碼,有興趣的球友可以去參考閱讀一下:
org.datastream.KafkaProducer
該類主要是用來生產測試數據用的。
watermark,自定義處理trigger窗口處理機制可以參考下面兩個目錄里的案例代碼:
org.datastream.trigger
org.datastream.watermark
org.datastream.windows
對于join操作,目前flink不支持datastream與靜態數據集的join操作,普通的窗口join可以參考下面源碼
想要與靜態數據集的join,可以實現同步和異步的join操作,浪尖這里實現了同步基于flatmap的,異步的基于異步IO的join操作,基本滿足企業開發的需求。
Sideoutput側輸出,這個可以實現數據分流的功能,也是非常好用,主要是在處理延遲數據和普通數據分流的時候使用。
迭代輸出,主要是分批處理和流處理的迭代輸出。代碼案例總共三個,實際上機器學習哪些lib包里有更多。
Source主要是kafka,sink實現了三種redis,mysql,hbase,這三個比較常用。
還有比較重要的配置,比如checkpoint,時間戳分配器,事件時間,處理時間,自動故障恢復等等比較實用的需求。
關于“flink的DataStream應該學習哪些內容”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。