本篇文章首發於個人微信公衆號大數據技術和人工智能,歡迎關注個人頭條號和微信公衆號「大數據技術和人工智能」(微信搜索bigdata_ai_tech)獲取更多幹貨,也歡迎關注個人CSDN博客。html
本文簡單介紹一下Flink,部份內容來源於網絡,想深刻了解Flink的讀者能夠參照官方文檔深刻學習Apache Flink。算法
流計算
在介紹Flink以前首先說一下流計算的概念,流計算是針對流式數據的實時計算。apache
- 流式數據是指將數據看做數據流的形式來處理,數據流是在時間分佈和數量上無限的一系列動態數據集合體,數據記錄是數據流的最小組成單元。
- 流數據具備數據實時持續不斷到達、到達次序獨立、數據來源衆多格式複雜、數據規模大且不十分關注存儲、注重數據的總體價值而不關注個別數據等特色。
Apache Flink是什麼
Apache Flink是一個分佈式流批一體化的開源平臺。Flink的核心是一個提供數據分發、通訊以及自動容錯的流計算引擎。Flink在流計算之上構建批處理,而且原生的支持迭代計算、內存管理以及程序優化。官方稱之爲Stateful Computations over Data Streams
,即數據流上有狀態計算。官方對Flink的詳細介紹What is Apache Flink。編程
Flink的特色
現有的開源計算方案會把流處理和批處理做爲兩種不一樣的應用類型(如Apache Storm只支持流處理,Apache Spark只支持批(Micro Batching)處理),流處理通常須要支持低延遲、Exactly-once保證,而批處理須要支持高吞吐、高效率。Flink同時支持流處理和批處理,做爲流處理時輸入數據流是無界的,批處理被做爲一種特殊的流處理,只是它的輸入數據流被定義爲有界的。微信
Flink重要基石
Apache Flink的四個重要基石:Checkpoint、State、Time、Window網絡
- Checkpoint:基於Chandy-Lamport算法實現了分佈式一致性快照,提供了一致性的語義
- State:豐富的State API,包括ValueState、ListState、MapState、BoardcastState
- Time:實現了Watermark機制,可以支持基於事件的時間的處理,可以容忍數據的延時、遲到和亂序
- Window:開箱即用的窗口,滾動窗口、滑動窗口、會話窗口和靈活的自定義窗口
Flink的優點
- 支持高吞吐、低延遲、高性能的流數據處理
- 支持高度靈活的窗口(Window)操做
- 支持有狀態計算的Exactly-once語義
- 提供DataStream API和DataSet API
適用場景
Flink支持下面這三種最多見類型的應用示例,官網有詳細的介紹Use Cases。架構
- 事件驅動的應用程序
- 數據分析應用
- 數據管道應用
基礎架構
Flink集羣啓動後,首先會啓動一個JobManger和一個或多個TaskManager。由Client提交任務給JobManager,JobManager再調度任務到各個TaskManager去執行,而後TaskManager將心跳和統計信息彙報給JobManager,TaskManager之間以流的形式進行數據的傳輸。JobManager、TaskManager和Client均爲獨立的JVM進程。分佈式
- JobManager是系統的協調者,負責接收Job,調度組成Job的多個Task的執行,收集Job的狀態信息,管理Flink集羣中的TaskManager。
- TaskManager是實際負責執行計算的Worker,並負責管理其所在節點的資源信息,在啓動的時候將資源的狀態向JobManager彙報。
- Client負責提交Job,能夠運行在任何與JobManager環境連通的機器上,提交Job後,Client能夠結束進程,也能夠不結束並等待結果返回。
基本編程模型
Flink程序的基礎構建模塊是流(streams)與轉換(transformations),每個數據流都起始於一個或多個source,並終止於一個或多個sink,下面是一個由Flink程序映射爲Streaming Dataflow的示意圖:性能
容錯機制
Flink的容錯機制的核心部分是分佈式數據流和operator state
的一致性快照,系統發生故障的時候這些快照能夠充當一致性檢查點來退回,恢復做業的狀態和計算位置等。官網有詳細介紹Data Streaming Fault Tolerance。學習
- Checkpointing
- Recovery
- Operator Snapshot Implementation