1. 程式人生 > 其它 >Flink部署、使用、原理簡介

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執行元件

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 向其分配任務