Flink部署、使用、原理簡介
技術標籤:平凡人筆記
通過安裝包方式部署
下載地址
https://archive.apache.org/dist/flink/flink-1.7.2/flink-1.7.2-bin-hadoop27-scala_2.11.tgz
下載之後 解壓
啟動flink
訪問flink web ui
http://localhost:8081
執行flink demo程式
-
啟動7777埠服務
nc-lk7777
-
執行flink wordcount streamjar包傳入 7777埠
bin/flinkrunexamples/streaming/SocketWindowWordCount.jar--port7777
-
通過web ui檢視啟動情況
可以看到該任務進行執行
-
在7777的服務裡面輸入內容
-
檢視日誌
tail-fflink*.out
-
關閉7777服務
可以看到該任務已經結束了
總結以上流程
任務執行細節詳見
簡單使用了flink之後,接下來咱刨析下flink執行的原理
原理介紹
Flink執行元件
Flink是通過Java和Scala實現的 所以所有元件都執行在Java虛擬機器上
-
作業管理器(JobManager)
-
控制一個應用程式執行的主程序 每個應用程式都會被一個不同的JobManager所控制執行
-
JobManager會先接受到要執行的應用程式 這個應用程式會包括作業圖(JobGraph)、邏輯資料流圖(logical dataflow graph)和打包了所有類、庫和其他資源的jar包
-
JobManager會把JobGraph轉換成一個物理層面的資料流圖 這個圖叫做執行圖(ExecutionGraph) 包含了所有可以併發執行的任務
-
JobManager 會向資源器 (ResourceManager)請求執行任務必要的資源 也就是工作管理員(TaskManager)上的插槽(slot) 一旦它獲取到了足夠的資源 就會將執行圖分發到真正執行它們的TaskManager上。而在執行的過程中 JobManager會負責所有需要中央協調的操作 比如檢查點(CheckPoints)的協調
-
-
工作管理員(TaskManager)
-
Flink中的工作程序 通過在Flink中會有多個TaskManager執行 每一個TaskManager會包含一定數量的slot插槽。插槽的數量限制了TaskManager能夠執行的任務數量
-
在執行過程中 一個TaskManager可以和其他執行在同一應用程式的TaskManager交換資料
-
-
資源管理器(ResouceManager)
-
主要負責管理工作管理員(TaskManager)的插槽(slot) TaskManager插槽是Flink中定義的處理資源單元
-
Flink為不同的環境和不同的資源管理工具提供了不同的資源管理器 比如 Yarn、Mesos、K8s、standalone部署
-
當JobManager申請插槽資源時 ResourceManager會將有空閒插槽的TaskManager分配給JobManager 如果ResourceManager沒有足夠的插槽來滿足JobManager請求 還可以向資源提供平臺發起會話 以提供啟動TaskManager程序的容器 。ResourceManager還負責終止空閒的TaskManager 釋放計算資源
-
-
分發器(Dispatcher)
-
可以跨作業執行 它為應用提交提供了Rest介面
-
當一個任務被提交時 分發器就會啟動並將應用移交給一個JobManager
-
Dispatcher也會啟動一個Web UI 用來方便展示和監控作業執行資訊
-
Dispatcher在架構中可能不是必須的 取決於應用提交執行的方式
-
任務提交流程
如果部署的叢集環境不同(例如 YARN,Mesos,Kubernetes,standalone 等),其中一些步驟可以被省略,或是有些元件會執行在同一個 JVM 程序中
-
將 Flink 叢集部署到 YARN
-
Flink 任務提交後
-
Client 向 HDFS 上傳 Flink 的 Jar 包和配置
-
之後向 Yarn ResourceManager 提交任務
-
ResourceManager 分配 Container 資源並通知對應的 NodeManager 啟動 ApplicationMaster
-
ApplicationMaster 啟動後加載 Flink 的 Jar 包和配置構建環境
-
然後啟動 JobManager
-
之後 ApplicationMaster 向 ResourceManager 申 請 資 源 啟 動 TaskManager
-
ResourceManager 分 配 Container 資 源 後
-
由 ApplicationMaster 通 知 資 源 所 在 節 點 的 NodeManager 啟 動 TaskManager
-
NodeManager 載入 Flink 的 Jar 包和配置構建環境並啟動 TaskManager
-
TaskManager 啟動後向 JobManager 傳送心跳包,並等待 JobManager 向其分配任務