Flink原理(一)——基礎架構


Flink系列博客,基於Flink1.6,打算分為三部分:原理、源碼、實例以及API使用分析,后期等系列博客完成后再弄一個目錄。

該系列博客是我自己學習過程中的一些理解,若有不正確、不准確的地方歡迎大伙留言分享。文中引用均已標注,若有侵權,請聯系我,立馬刪除!


 

1、前言

  在講Flink基本結構之前,我們的先知道Flink是什么?中文官網上的解釋是:Apache Flink 是一個框架和分布式處理引擎,用於在無邊界和有邊界數據流上進行有狀態的計算[1]。關於無邊界和有邊界數據流的定義可以參考官網上的解釋,從其解釋上可以了解到Flink是一個框架和計算引擎,是用來處理數據流的。處理數據流並不意味着Flink僅僅能用於我們通常所說的流處理系統中,這里數據流主要是為了說明Flink處理數據的方式,是以流的形式進行的。其實不僅流處理,Flink也可以做到批處理,即Flink可以實現批/流一體化,至於如何實現的,這里僅提及相關概念,后續博客會慢慢道來。

2、Flink基本架構

  2.1、Flink的基本架構圖[2]:

  從圖中可知,Flink整個系統主要由兩個組件組成:JobManager、TaskManager組件,其架構是遵循主-從設計原則的,JobManager為master結點、TaskManager為Slave結點(也稱work結點),組件之間的通信是借助Akka Framework。

  1)JobManager:負責整個Flink集群任務的調度和資源分配。從client獲取提交的任務后,JobManager根據TaskManager中資源(TaskSlots)使用的情況,分配資源並命令TaskManager啟動任務。在這個過程中,JobManager會觸發checkpoint操作,TaskManager執行checkpoint操作,其中所有的checkpoint協調的過程都在JobManager中完成的。此外,若是任務失敗了,也由JobManager協調失敗任務的恢復。

  2)TaskManager:負責具體的任務執行和結點上資源申請和管理,多結點之間的數據交換也是在TaskManager上執行。Flink集群中,每個worker(taskManager)對應的是一個JVM進程。

  換句話說,JobManager分配資源、任務,TaskManager擁有資源、啟動任務。一般在生產環境中,JobManager和TaskManager所在結點應是分離的,其目的主要是為了保證TaskManager(基於內存的計算)不搶奪JobManager的資源。

  3)client客戶端:不是runtime的一部分,換句話說,Flink集群啟動client提交的任務之后,client客戶端時可以斷開的,是可以不需要的。client不像JobManager和TaskManager對應着 flink集群中的結點(或是物理機、或是虛擬機、或是容器),是觸發執行的一個抽象化,若程序在JobManager所在結點執行,則稱client在JobManager結點上,同樣,其也可以在TaskManager結點上。

  提交一個任務的正常流程是:client與JobManager構建Akka連接,將任務提交到JobManager上,JobManager根據已經注冊在JobManager中TaskManager的資源(TaskSlot)情況,將任務分配給有資源的TaskManager,並命令TaskManager啟動任務,TaskManager則從JobManager接受需所部屬的任務,使用slot資源啟動task,建立數據接入的網絡連接,然后接受數據並開始處理。

  2.2、taskSlot

  每個task slot是TaskManager的一部分,若一個taskManager有三個taskSlot,則這三個taskSlot會均分這個TaskManager的資源(僅內存,不包括CPU)。有多個slot意味着同一個JVM中會有多個子任務,這些任務會共享JVM的TCP連接和心跳信息。這里要說明的是,slot的個數不是subtask的個數是一一對應,一個slot中可以有多個subtask。在默認情況下,同一個job中的子任務(subtask)是可以共享一個slot的。這里涉及slot共享的概念,后續博客中分析。

 

參考: 

[1]https://flink.apache.org/zh/flink-architecture.html

[2]https://ci.apache.org/projects/flink/flink-docs-release-1.6/concepts/runtime.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM