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