《基于Apache Flink的流處理》讀書筆記( 三 )


十一、Flink檢查點算法基于Chandy-Lamport分布式快照算法來實現        該算法不會暫停整個應用 , 而是會把任務處理和檢查點分離,這樣在部分任務持久化狀態過程中,其他任務還可以繼續執行 。         檢查點的原理步驟:         1.由JobManager向Source數據源任務生成一個新的檢查點編號,Source算子接收到信息后,暫停發出記錄,利用狀態后端觸發生成本地狀態檢查點,狀態后端保存完檢查點后通知任務,隨后任務向JobManager發送確認信息,隨后恢復正常工作,然后生成特殊的CheckPoint Barrier記錄,以廣播的形式發送到下游任務 。         2.當下游Transform算子接收到新的檢查點分割符號,會暫停處理并且緩存當前流的數據,等待接收其他分區的檢查點分隔符,所有分隔符到達后,通知狀態后端生成檢查點,保存通知JobManager后 , 向下游發送檢查點分隔符CheckPoint Barrier后,繼續處理數據 。         3.Sink算子接收到分隔符后依次等待分隔符到齊后,生成快照并且寫入檢查點,向JobManager確認 。         4.當JobManager確認已接受所有應用任務返回檢查點確認消息后,將此次檢查點標記為完成 。
十二、Flink算子12.1基本操作1.map 對每個元素應用函數返回新的結果         2.filter 給出給定的條件過濾數據         3.flatMap 轉換類似map,對每個輸入產生零個、一個或多個輸出事件,事實可以看作filter和map的泛化
12.2KeyedStream從邏輯上將事件按照鍵值分配到多條獨立的子流中         1.keyBy:指定的鍵值將一個DataStream轉化為KeyedStream         2.滾動聚合:滾動聚合作用與KeyedStream上 , 它將生成一個包含聚合結果的DataStream,主要操作有:sum、min、max、minBy、maxBy         3.Reduce:滾動聚合的泛化,它將一個ReduceFunction應用在一個KeyedStream上,每個到來的事件都會和Reduce結果進行一次組合 , 從而產生一個新的DataStream
12.3多流轉換將多條流聯合起來處理,或將一條流分割成多條流以應用不同邏輯 。        Union:合并兩條或多條類型相同的DataStream,生成一條新的類型相同的DataStream        Connect:接收一個DataStream并返回一個ConnectedStream對象        Split和Select:union轉換的你操作 。將輸入流分割成2條或多條類型和輸入流相同的輸出流 。
12.4分發轉換在使用DataStream API構建應用時,系統會根據操作語義和配置的并行度自動選擇數據分區策略并且數據轉發到正確的目標,返回的是DataStream 。        shuffle:隨機數據交換策略:均勻的分布隨機將記錄發往后繼算子的并行任務        rebalence:輪流 , 將輸入流中的事件以輪流的方式均勻地分配給后繼任務        rescale:重調 , 輪流對事件進行分發,單局限于部分后繼任務(一個Stream會指定1個或多個Stream均勻分發,而不是對所有Stream均勻分發),當接收端任務遠大于發送端任務有效        broadcast:廣播 , 將輸入流的事件復制并發往下游算子        grobal:將輸入流中的所有事件發往下游算子的第一個并行任務
十三、KeyedProcessFunction作用于KeyedStream上,使用非常靈活,該函數會針對流中每條記錄調用一次,實現了RichFunction接口 , 支持了open、close、getRuntimeContext,等方法,它還會提供以下2個方法         processElement:會針對流中每條記錄都調用一次         onTimer:回調函數,注冊的計時器觸發時被調用
十四、觸發器決定了什么時候窗口準備就緒,觸發計算 , 每個窗口都會分配默認的Trigger 。比如EventTime的EventTimerTrigger , ProcessingTime的ProcessingTimeTrigger 。        需要繼承Trigger抽象類                onElement:在窗口中沒進入一條數據時調用                onProcessingTime:根據ProcessingTime判斷是否滿足定時器的條件調用                onEventTime:根據窗口最新的EventTime判斷是否滿足定時器的條件                clear:在窗口清除時調用        前3個方法都會返回TriggerResult , 其中包含了4個枚舉值                CONTINUE:表示窗口不執行任何操作 。即不觸發窗口計算,也不刪除元素                FIRE:觸發窗口的計算,單保留窗口元素                PURGE:不觸發窗口計算 , 丟棄窗口,并且刪除窗口元素                FIRE_AND_PURGE:觸發窗口計算 , 輸入結果 , 并且清楚窗口數據

推薦閱讀