Flink簡介
- Apache Flink 是一個面向分佈式數據流處理和批量數據處理的開源計算平臺,提供支持流處理和批處理兩種類型應用的功能。
- Apache Flink的前身是柏林理工大學一個研究性項目,在2014被Apache孵化器所接受,然後迅速地成爲了Apache Software Foundation的頂級項目之一。
Flink 特點
- 現有的開源計算方案,會把流處理和批處理作爲兩種不同的應用類型:流處理一般需要支持低延遲、Exactly-once保證,而批處理需要支持高吞吐、高效處理
- Flink是完全支持流處理,也就是說作爲流處理看待時輸入數據流時無界的;批處理被作爲一種特殊的流處理,只是它的輸入數據流被定義爲有界的。
Flink 組件棧
Deployment層
主要涉及了Flink的部署模式、Flink支持多種部署模式:本地、集羣(Standalone/YARN)、雲(GCE/EC2).
Runtime層
Runtime層提供了支持Flink計算的全部核心實現,比如:支持分佈式Stream處理、JobGraph到ExecutionGraph的映射、調度等等,爲上層API層提供基礎服務
API層
API層主要實現了面向無界Stream的流處理和麪向Batch的批處理API,其中面向流處理對應DataStream API,面向批處理對應DataSet API
Libaries層
在API層之上構建的滿足特定應用的實現計算框架,也分別對應於面向流處理和麪向批處理兩類。
Flink優勢
- 支持高吞吐、低延遲、高性能的流處理
- 支持高度靈活的窗口(Window)操作
- 支持有狀態計算的Exactly-once語義
- 提供DataStream API和DataSet API
Flink數據流和時間窗口
基本概念
- Flink程序的基礎構建模塊是流(streams)與轉換(transformations)。
- 每一個數據流起始於一個或多個source,並終止於一個或多個sink。
時間窗口
- 流上的聚合需要由窗口來劃定範圍,比如 “計算過去的5分鐘” 或者 “最後100個元素的和”
- 窗口通常被區分爲不同的類型,比如滾動窗口(沒有重疊),滑動窗口(有重疊),以及會話窗口(由布活動的間隙所打斷)
Flink分佈式運行環境
- Flink是基於Master-Slave風格的架構
- Flink集羣啓動時,會啓動一個JobManager進程、至少一個TaskManager進程
JobManager
- Flink系統的協調者,他負責接受Flink Job ,調度組成Job的多個Task的執行
- 收集Job的狀態信息,並管理Flink集羣中從節點TaskManager
TaskManager
- 實際負責執行計算的Worder,在其上執行Flink Job的一組Task
- TaskManager負責管理其所在節點上的資源信息,如內存、磁盤、網絡,在啓動的時候將資源的狀態向JobManager彙報
Client
- 用戶提交一個Flink程序時,會首先創建一個Client,該Client首先會對用戶提交的Flink程序進行預處理,並提交到Flink集羣
- Client會將用戶提交的Flink程序組裝一個JobGraph,並且時以JobGraph的形式提交的
Flink安裝
方式一
- git clone https://github.com/apache/fli...
- cd flink
- mav clean package -DskipTests
- cd build-target
方式二
到官網下載編譯版:https://flink.apache.org/down...
不同環境下到bin目錄,運行start-local.bat
運行正常,訪問頁面:http://localhost:8081
Flink WordCount入門程序
官方推薦快速搭建一個項目:
curl https://flink.apache.org/q/qu... | bash