wordpress 如何采集寧波seo外包引流推廣
目錄
- 一、Flink 簡介
- 二、Flink 組件棧
- 1. API & Libraries 層
- 2. runtime層
- 3. 物理部署層
- 三、Flink 集群架構(gòu)
- 四、Flink基本編程模型
- 五、Flink 的部署模式
- 六、Flink 任務(wù)的執(zhí)行模式
- 五、Flink 的優(yōu)點(diǎn)
一、Flink 簡介
Apache Flink 的前身是柏林理工大學(xué)一個研究性項(xiàng)目, 在 2014 被 Apache 孵化器所接受,然后迅速地成為了Apache Software Foundation的頂級項(xiàng)目之一。2019 年 1 年,阿里巴巴收購了 Flink 的母公司 Data Artisans,并宣布開源內(nèi)部的 Blink,Blink 是阿里巴巴基于 Flink 優(yōu)化后的版本,增加了大量的新功能,并在性能和穩(wěn)定性上進(jìn)行了各種優(yōu)化,經(jīng)歷過阿里內(nèi)部多種復(fù)雜業(yè)務(wù)的挑戰(zhàn)和檢驗(yàn)。
Flink 是一個分布式的流處理框架,它能夠?qū)τ薪绾蜔o界的數(shù)據(jù)流進(jìn)行高效的處理。
二、Flink 組件棧
Flink 采用分層的架構(gòu)設(shè)計,從而保證各層在功能和職責(zé)上的清晰。如下圖所示,由上而下分別是 API & Libraries 層、Runtime 核心層以及物理部署層:
1. API & Libraries 層
- API層主要實(shí)現(xiàn)了面向無界Stream的流處理和面向Batch的批處理API,其中面向流處理對應(yīng)DataStream API,面向批處理對應(yīng)DataSet API
- 在API層之上構(gòu)建的滿足特定應(yīng)用的實(shí)現(xiàn)計算框架,也分別對應(yīng)于面向流處理和面向批處理兩類
這里的API可以進(jìn)行更具體的劃分
API 的一致性由下至上依次遞增,接口的表現(xiàn)能力由下至上依次遞減
-
SQL 和 Table API 同時適用于批處理和流處理,這意味著可以對有界數(shù)據(jù)流和無界數(shù)據(jù)流以相同的語義進(jìn)行查詢,并產(chǎn)生相同的結(jié)果。
-
DataStream 和 DataSet API 是 Flink 數(shù)據(jù)處理的核心 API,支持使用 Java 語言或 Scala 語言進(jìn)行調(diào)用,提供了數(shù)據(jù)讀取,數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)輸出等一系列常用操作的封裝。
-
Stateful Stream Processing 是最低級別的抽象,它通過 Process Function 函數(shù)內(nèi)嵌到 DataStream API 中。 Process Function 是 Flink 提供的最底層 API,具有最大的靈活性,允許開發(fā)者對于時間和狀態(tài)進(jìn)行細(xì)粒度的控制。
2. runtime層
這一層是 Flink 分布式計算框架的核心實(shí)現(xiàn)層,包括作業(yè)轉(zhuǎn)換,任務(wù)調(diào)度,資源分配,任務(wù)執(zhí)行等功能,基于這一層的實(shí)現(xiàn),可以在流式引擎下同時運(yùn)行流處理程序和批處理程序。
3. 物理部署層
Flink 的物理部署層,用于支持在不同平臺上部署運(yùn)行 Flink 應(yīng)用
Flink支持多種部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)
三、Flink 集群架構(gòu)
Flink采用標(biāo)準(zhǔn)的 Master - Slave 結(jié)構(gòu), 其中,Master 部分包含了三個核心組件:Dispatcher、ResourceManager 和 JobManager,而 Slave 則主要是 TaskManager 進(jìn)程。它們的功能分別如下:
-
JobManager: 負(fù)責(zé)所有需要中央?yún)f(xié)調(diào)的操作,比如說檢查點(diǎn)(checkpoints) 的協(xié)調(diào)
- 接收由 Dispatcher 傳遞過來的執(zhí)行程序,該執(zhí)行程序包含了作業(yè)圖 (JobGraph),邏輯數(shù)據(jù)流圖 (logical dataflow graph) 及其所有的 classes 文件以及第三方類庫 (libraries) 等等 。
- JobManagers 會將 JobGraph 轉(zhuǎn)換為執(zhí)行圖 (ExecutionGraph)
- 向 ResourceManager 申請資源來執(zhí)行該任務(wù),一旦申請到資源,就將執(zhí)行圖分發(fā)給對應(yīng)的 TaskManagers 。因此每個作業(yè) (Job) 至少有一個 JobManager;高可用部署下可以有多個 JobManagers,其中一個作為 leader,其余的則處于 standby 狀態(tài)。
-
TaskManagers:負(fù)責(zé)實(shí)際的子任務(wù) (subtasks) 的執(zhí)行
- 每個 TaskManagers 都擁有一定數(shù)量的 slots。Slot 是一組固定大小的資源的合集 (如計算能力,存儲空間)
- TaskManagers 啟動后,會將其所擁有的 slots 注冊到 ResourceManager 上,由 ResourceManager 進(jìn)行統(tǒng)一管理
- 在執(zhí)行過程中,一個TaskManager可以跟其它運(yùn)行同一應(yīng)用程序的 TaskManager交換數(shù)據(jù)
-
ResourceManager :負(fù)責(zé)管理 slots 并協(xié)調(diào)集群資源
- ResourceManager 接收來自 JobManager 的資源請求,并將存在空閑 slots 的 TaskManagers 分配給 JobManager 執(zhí)行任務(wù)
- Flink 基于不同的部署平臺,如 YARN , Mesos,K8s 等提供了不同的資源管理器
- 當(dāng) TaskManagers 沒有足夠的 slots 來執(zhí)行任務(wù)時,它會向第三方平臺發(fā)起會話來請求額外的資源。
-
Dispatcher
- 負(fù)責(zé)接收客戶端提交的執(zhí)行程序,并傳遞給 JobManager
- 提供了一個 WEB UI 界面,用于監(jiān)控作業(yè)的執(zhí)行情況
- 在架構(gòu)中可能并不是必需的,這取決于應(yīng)用提交運(yùn)行的方式。
Flink任務(wù) on yarn
四、Flink基本編程模型
所有的Flink程序都是由三部分組成的: Source 、Transformation 和 Sink
- Source 負(fù)責(zé)讀取數(shù)據(jù)源
- Transformation 利用各種算子進(jìn)行處理加工
- Sink 負(fù)責(zé)輸出
每一個dataflow以一個或多個sources開始以一個或多個sinks結(jié)束。dataflow 類似于任意的有向無環(huán)圖(DAG)
下面是一個由Flink程序映射為Streaming Dataflow的示意圖:
轉(zhuǎn)化為并行的數(shù)據(jù)流時
五、Flink 的部署模式
前文介紹一共有三種部署模式,分別是部署在本地、集群和云上。其中常見的部署模式是本地和集群,細(xì)分為下面三種
- Local:以單機(jī)模式運(yùn)行,無需啟動分布式資源管理器
- Standalone:作為一個獨(dú)立的集群運(yùn)行,獨(dú)占集群中的資源,不依賴任何外部的資源管理平臺,只能運(yùn)行Flink
- Flink On Yarn:在yarn之上運(yùn)行,利用YARN來管理資源分配和任務(wù)調(diào)度,集群中可運(yùn)行其他系統(tǒng)
六、Flink 任務(wù)的執(zhí)行模式
-
Session Mode:會話模式
需要先啟動一個集群,保持一個會話,在這個會話中通過客戶端提交作業(yè)。集群啟動時所有資源就都已經(jīng)確定,所有提交的作業(yè)會競爭集群中的資源。適合任務(wù)規(guī)模小,執(zhí)行時間短的大量作業(yè)。
Flink的作業(yè)執(zhí)行環(huán)境會一直保留在集群上,直到會話被顯式終止。這樣,可以提交多個作業(yè),它們可以共享相同的集群資源和狀態(tài),從而實(shí)現(xiàn)更高的效率和資源利用。
-
Per-Job Mode:單作業(yè)模式
每個Flink應(yīng)用程序作為一個獨(dú)立的作業(yè)被提交和執(zhí)行。每次提交的Flink應(yīng)用程序都會創(chuàng)建一個獨(dú)立的作業(yè)執(zhí)行環(huán)境,該作業(yè)執(zhí)行環(huán)境僅用于執(zhí)行該特定的作業(yè)。當(dāng)作業(yè)完成后,作業(yè)執(zhí)行環(huán)境會被釋放,集群關(guān)閉,資源釋放
-
Application Mode:應(yīng)用模式
前2種模式中,Flink程序代碼是在客戶端執(zhí)行,應(yīng)用模式中,代碼在在集群上執(zhí)行
五、Flink 的優(yōu)點(diǎn)
- Flink 是基于事件驅(qū)動 (Event-driven) 的應(yīng)用,能夠同時支持流處理和批處理
- 基于內(nèi)存的計算,能夠保證高吞吐和低延遲,具有優(yōu)越的性能表現(xiàn)
- 支持精確一次 (Exactly-once) 語意,能夠完美地保證一致性和正確性
- 分層 API ,能夠滿足各個層次的開發(fā)需求
- 支持高可用配置,支持保存點(diǎn)機(jī)制,能夠提供安全性和穩(wěn)定性上的保證
- 多樣化的部署方式,支持本地,遠(yuǎn)端,云端等多種部署方案
- 具有橫向擴(kuò)展架構(gòu),能夠按照用戶的需求進(jìn)行動態(tài)擴(kuò)容
- 活躍度極高的社區(qū)和完善的生態(tài)圈的支持