文章目錄
1. Flink是什麼
Apache Flink 是一個框架和分佈式處理引擎,用於對無界和有界數據流進行狀態計算
Flink 框架的重要方面:
1.1處理無邊界和有邊界數據
任何類型的數據都是作爲事件流產生的,信用卡交易、傳感器測量、機器日誌、網站或移動應用程序上的用戶交互,所有這些數據都以流的形式生成。
數據能夠被處理爲無邊界和有邊界數據
- 無邊界流(流處理),定義了起始但沒有定義結束,它們不會在數據生成時終止並提供數據。無邊界的流必須被連續地處理,即,事件被攝取後必須立即處理。等待所有輸入數據到達是不可能的,因爲輸入是無界的,在任何時間點都不會完成。處理無界數據通常需要以特定的順序接收事件,例如事件發生的順序,以便能夠推斷結果的完整性。
- 有界流(批處理),定義了起始和結束。可以通過在執行任何計算之前提取所有數據來處理有界流。由於有界數據集始終可以排序,因此不需要有序攝取即可處理有界流。有界流的處理也稱爲批處理。
Apache Flink擅長處理無界和有界數據集。對時間和狀態的精確控制使Flink的運行時能夠在無邊界的流上運行任何類型的應用程序。有界流由專門爲固定大小的數據集設計的算法和數據結構在內部處理,產生了出色的性能
1.2 任何地方都可以部署Flink應用
- Apache Flink是一個分佈式系統,需要計算資源來執行應用程序。Flink集成了所有常見的集羣資源管理器,如Hadoop Yarn、Apache Mesos和Kubernetes,但也可以設置爲作爲一個獨立的集羣運行
- Flink被設計爲能夠很好地工作於前面列出的每個資源管理器。這是通過特定於資源管理器的部署模式實現的,該模式允許Flink以慣用的方式與每個資源管理器進行交互。
- 在部署Flink應用程序時,Flink會根據應用程序配置的並行性自動識別所需的資源,並從資源管理器中請求這些資源。在失敗的情況下,Flink通過請求新的資源來替換失敗的容器。所有提交或控制應用程序的通信都是通過REST調用進行的。這簡化了Flink在許多環境中的集成
1.3 能夠以任何規模運行應用程序
- Flink的設計目的是在任何規模上運行有狀態流應用程序。應用程序可能被並行化爲數千個任務,這些任務分佈在集羣中並同時執行。因此,一個應用程序可以利用幾乎無限數量的cpu、主內存、磁盤和網絡IO。而且,Flink很容易維護非常大的應用程序狀態。它的異步和增量檢查點算法確保對處理延遲的影響最小,同時保證一次狀態一致性。
- 用戶報告了在他們的生產環境中運行的Flink應用程序令人印象深刻的規模性數字,例如
1.每天處理數萬億事件的應用程序
2.應用程序維護多個tb級的狀態
3.運行在數千個內核上的應用程序。
1.4 利用 In-Memory 性能
- 有狀態的Flink應用程序針對本地狀態訪問進行了優化。任務狀態始終在內存中維護,如果狀態大小超過可用內存,則在訪問高效的磁盤數據結構中維護。因此,任務通過訪問本地(通常在內存中)狀態來執行所有計算,從而產生非常低的處理延遲。通過週期性和異步地將本地狀態檢查點指向持久存儲,Flink確保了故障發生時的一次狀態一致性。
2. 爲什麼要用Flink
- 流數據更真實地反映了我們的生活方式
- 傳統的數據架構是基於優先數據集的
- 我們的目標:
- 低延遲
- 高吞吐
- 結果的準確性和良好的容錯性
2.1 哪些行業需要處理流數據
- 電商和市場營銷
數據報表、廣告投放、業務流程需要 - 物聯網(IOT)
傳感器實時數據採集和顯示、實時報警,交通運輸業 - 電信業
基站流量調配 - 銀行和金融業
實時結算和通知推送,實時檢測異常行爲
3. 流處理的發展和演變
- 傳統數據處理架構
在關係型數據庫裏直接進行存取,一個一個處理 - 有狀態的流式處理
在本地添加一個local state相當於內存,然後同時添加一個類似於容災機制的periodic checkpoint
- lambda架構
兩套系統,同時保證低延遲和結果準確
4. Flink的主要特點
-
事件驅動(Event-driven)
-
基於流的世界觀
在Flink的世界觀中,一切都是由流組成的,離線數據是有界的流,實時數據是一個沒有界限的流 -
分層API
- 越頂層越抽象,表達含義越簡明,使用越方便
- 越底層越具體,表達能力越豐富,使用越靈活
4.1 Flink的其他特點
- 支持事件時間(event-time)和處理時間(processing-time)語義
- 精確一次(exactly-only)的狀態一致性保證
- 低延遲,每秒處理數百萬個事件,毫秒級延遲
- 與衆多常用存儲系統的鏈接 HDFS、HIVE、Hadoop、Redis等等
- 高可用,動態擴展,實現7*24小時全天候運行
5. Flink vs Spark Streaming
流(stream)和微批(micro-batching)
數據模型
- spark 採用 RDD 模型,spark streaming 的 Dstream 實際上也就是一組組小批數據 RDD 的集合
- flink 基本數據模型是數據流 DataFlow ,以及事件(events)序列
運行時架構 - spark 是批計算,將 DAG 劃分爲不同的stage, 一個完成後纔可以計算下一個
- flink是標準的流執行模式,一個事件在一個節點處理完後可以直接發往下一個節點進行處理