Flink-簡介與基礎
- 一、Flink起源
- 二、Flink數據處理模式
- 1.批處理
- 2.流處理
- 3.Flink流批一體處理
- 三、Flink架構
- 1.Flink集群
- 2.Flink Program
- 3.JobManager
- 4.TaskManager
- 四、Flink應用程序
- 五、Flink高級特性
- 1.時間流(Time)和窗口(Window)
- 2.狀態流(State)
- 3.快照(Checkpoint)
- 總結
- 參考文檔
一、Flink起源
大數據計算引擎由批處理項流處理發展,由處理單一類型數據到批流一體方法發展。由單一功能逐步發展成更通用、更高效、更易用的一站式(混合架構)的計算引擎。計算引擎發展過程中典型架構:
- MapReduce:批處理引擎,hadoop中核心組件,開創大數據處理核心思想,即map、reduce。
- Storm:流處理引擎,為了滿足更高時效性而產生
- Spark:支持流式處理和批處理的統一計算引擎,基于內存計算、提高性能
- Flink:支持流式處理和批處理的統一計算引擎,支持狀態流、時間流等流處理
Flink誕生于柏林工業大學的一個大數據研究項目StratoSphere,2014年被捐獻給Apache,成為Apache的頂級大數據項目。Flink將計算的主要方向定位為流處理,將批處理作為流處理的一個特殊情況。并提供了一些如數據狀態、事件時間、分布式快照、watermark等高級功能。
二、Flink數據處理模式
在大數據領域早期基本都是批處理,后期隨著大數據處理應用范圍的拓展,逐步發到到流處理。
1.批處理
批處理就是對整個有界數據集進行排序、統計或者匯總計算后輸出結果。批處理的數據主要有以下特點:
- 有界:批處理數據集代表數據的有限集合
- 持久:數據通常存儲在可重復獲取的持久存儲設備中
- 就緒:數據在計算之前已經就緒,不會發生變化
- 大量:批處理操作通常是處理海量數據集的唯一方法
2.流處理
流處理是無界數據流,更符合實際情況,例如交易數據、傳感器數據等都是不斷產生而不會結束。流處理是產生一條數據就會處理一條數據,流處理系統需要對進入系統的數據進行實時計算。而且流數據不一定是持久化的,可能是業務系統實時產生的。
3.Flink流批一體處理
Flink即可以進行流處理,也支持對有界數據進行批處理。也就是Flink可以處理消息隊列或者日志這類流式數據源的實時數據,也支持從各種數據源消費有界的歷史數據。
三、Flink架構
Flink是一個分布式系統,采用master/slave架構,可以有效的分配和管理計算資源。集成了常見的集群資源管理器、也可以作為單獨集群運行。
1.Flink集群
Flink運行時主要由一個JobManager和多個TaskManager組成。
2.Flink Program
Flink應用程序不是運行時程序執行的一部分,主要是將用戶的Flink作業提交到JobManager,并觸發執行Flink程序。
3.JobManager
JobManger主要職責是協調Flink應用程序的分布式執行,主要是調度task、監控task執行情況、協調checkpoint、故障恢復等。
4.TaskManager
TaskManager主要是執行作業流中的task,并且緩存和交換數據流。
四、Flink應用程序
Flink應用程序編寫主要是指用戶對數據需要進行的操作,Flink將對數據的處理分為輸入、處理、輸出三個步驟。其中Source負責管理數據源輸入、Transformation負責數據計算、Sink負責將結果輸出。Transformation是根據需求由Flink提供的算子組合而成的一個處理流程。
Flink首先會將應用構建成一個Dataflow graph。當調用env.execute()時,graph會被打包并發送到JobManager上,JobManager會協調并執行應用。
五、Flink高級特性
1.時間流(Time)和窗口(Window)
實際應用中有時需要對歷史數據進行重新處理和分析。如果時間流只能依靠機器時鐘,一些基于時間的統計與運算得出的結果可能會有錯誤和偏差,因為為了滿足以上場景,Flink支持用數據流中的事件時間作為時間依據,而不是處理數據時的機器時間。
2.狀態流(State)
流處理過程中,很多操作如何處理都需要依據之前所有數據的累積結果、一些窗口函數也需要緩存之前的數據。Flink中的算子都可以是由狀態的,這些狀態都是本地訪問,這樣可以提高吞吐量和減低延遲。
3.快照(Checkpoint)
大數據運行過程中無法避免故障的出現,因此需要一定的故障恢復機制。Flink通過定期狀態快照和流重放來實現故障恢復和精確的一次計算。
總結
主要介紹了Flink背景和以流處理為主的設計理念,Flink的運行時架構、Flink作業的編程以及Flink的高級特性。
參考文檔
1.Flink基礎概念
2.Flink產生的背景以及簡介
3.Flink架構