flink基礎教程讀書筆記


數據架構設計領域發生了重大的變化,基於流的處理是變化的核心。

分布式文件系統用來存儲不經常更新的數據,他們也是大規模批量計算所以來的數據存儲方式。

批處理架構(lambda架構)實現計數的方式:持續攝取數據的管道(flume)每小時創建一個文件,由調度程序安排批處理作業分析最近生成的文件,然后輸出計數結果。

該架構缺點:1.組件多,設計管道、調度、作業程序,學習成本、管理成本大 2.修改分析時間周期不方便,涉及工作流調度邏輯 3.實現計數預警功能需要引入流處理系統,流處理做近似計算,批處理做准確計數。4.事件可能是亂序的,上一批事件可能混入當前批次。

 5.事件窗口是短板,不靈活。例如不能滿足登錄登出計數的需求。

 flink可以同時滿足計數和預警的功能,flink速度減慢只會導致數據在傳輸系統如kafka中堆積。

flink以時間為單位把事件流分割為一個個任務(稱為窗口)。

由固定時間分組改為根據事件產生的時間分組,只需要在flink中修改時間窗口的定義即可。

如果flink的代碼有改動,只需要重播kafka主題。

和lambda架構相比,flink不需要以時間為單位生成額外的文件,同時時間的定義被代碼明確定義。而不是攝取,調度,計算扯不清。

時間的概念:事件時間(時間發生的時候),處理時間(事件被處理的時間),攝入時間(進入流處理系統的時間)。很多情況下事件時間和處理時間是不一致的,即事件以亂序的方式進入系統。

有些需求要求盡快處理得到結果,即使有小的誤差也無所謂,這種場景適合采用處理時間。

有些需求要求只是統計特定時間發生的事件,這種場景適合采用事件時間。

flink支持的窗口:

時間窗口:flink支持2種時間窗口:滾動時間窗口(沒周期),滑動時間窗口(每周期,滑動步長值)

計數窗口:分組依據不再是時間窗口,而是根據元素的數量。同時也支持滾動和滑動2種方式。計數窗口需要謹慎使用,場景如下:假設事件窗口大小是100,達到90后事件停止,則窗口永遠不能關閉,該窗口占用的內存也浪費了。一種解決方式是通過超時觸發。

會話窗口:會話窗口是指活動階段,其前后都有非活動階段。在flink種,會話窗口由超時時間決定,即希望多久認為會話已經結束。

觸發器:觸發器控制生成結果的時間,即核實聚合窗口內容並返回給用戶。(收到水印觸發,自定義觸發*1秒1次*)

 編程模型:

 

maven:mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java -DarchetypeVersion=1.6.0 -DgroupId=com.test -DartifactId=flink -Dversion=1.0.0 -Dpackage=com.test -DinteractiveMode=false

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM