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