flink時間系統(tǒng)系列篇幅目錄:
一、[時間系統(tǒng)概述介紹](http://mp.weixin.qq.com/s?__biz=MzU5MTc1NDUyOA==&mid=2247483748&idx=1&sn=ac1817f9b1fffaa0440e4afccf1519af&chksm=fe2b652bc95cec3d73f1fc3390eabeaa576d8d2e8d202ab2e94e4ace5f2b827a1c58db8de740&scene=21#wechat_redirect)
二九妈、[Processing Time源碼分析 ](http://mp.weixin.qq.com/s?__biz=MzU5MTc1NDUyOA==&mid=2247483756&idx=1&sn=6430e7c02ca0c278ee0e272feaa38624&chksm=fe2b6523c95cec350f4e79a7cf3a0c36ba21c8ba1c85884d55fab73ca330890852718facb185&scene=21#wechat_redirect)
三丽蝎、[Event Time源碼分析](http://mp.weixin.qq.com/s?__biz=MzU5MTc1NDUyOA==&mid=2247483768&idx=1&sn=b292c48398d0c1ecaa83a53757912f51&chksm=fe2b6537c95cec2104711935f50d07cff4f37c5c77b003b42f9ce08a6ed7bb38bb75ed449d6d&scene=21#wechat_redirect)
四猎拨、時間系統(tǒng)在窗口函數(shù)中的應用分析
五、ProcessFunction 使用分析
六屠阻、實例講解:如何做定時輸出
在flink中窗口劃分可以基于時間红省、基于數(shù)量,我們這里所涉及到的窗口是針對時間類型窗口:processing-time window與event-time window国觉,時間系統(tǒng)在時間窗口應用主要用來注冊窗口觸發(fā)時間點吧恃,來決定窗口什么時候開始執(zhí)行窗口函數(shù)。接下來從源碼的角度分析窗口是如何使用時間系統(tǒng)的麻诀。
以WindowOperator 為入口痕寓,這是窗口操作中的核心類,它繼承了AbstractUdfStreamOperator并且實現(xiàn)了Triggerable接口蝇闭,而AbstractUdfStreamOperator 又繼承了AbstractStreamOperator呻率,
image
首先會在WindowOperator.open 初始化方法中,注冊了一個名為window-timers 的InternalTimerService服務呻引,由前面的分析可知使用該服務可以注冊一些定時器礼仗,在窗口中注冊窗口觸發(fā)的定時器,
image
注冊流程在WindowOperator.processElement方法中逻悠,不管是處理時間窗口還是事件時間窗口都會調(diào)用registerCleanupTimer方法完成真正的定時注冊元践,
image
該方法首先會計算出窗口的觸發(fā)時間,然后按照時間類型進行注冊童谒,triggerContext表示的是WindowOperator.Context對象单旁,在注冊相應類型觸發(fā)器時,實際上會調(diào)用在WindowOperator 在open 中初始化的InternalTimerService來完成相應的注冊定時器惠啄,
image
之后的流程就會按照前面幾個篇幅的分析完成成具體的注冊邏輯慎恒。
在Processing time與event time源碼分析中提到任内,定時器的觸發(fā)操作最后會調(diào)用Triggerable的onProcessingTime或者onEventTime 方法,而在WindowOperator.open方法中融柬,初始的InternalTimerService傳入的Triggerable
對象正好是this,也就是WindowOperator對象死嗦,也就是說在窗口中定時器的觸發(fā)會調(diào)用WindowOperator的onEventTime或者onProcessingTime方法,在這些方法里面會執(zhí)行窗口函數(shù)觸發(fā)邏輯判斷粒氧、窗口函數(shù)操作與狀態(tài)清除的工作越除。
以上就是關于時間系統(tǒng)如何在窗口函數(shù)中應用。
企業(yè)微信截圖_552a5b2d-e64f-41e2-be6b-865f5dc7a6dd.png