国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

雙維度剖析Flink整體架構

開發(fā) 架構
從2014年開源到現(xiàn)在,F(xiàn)link已經(jīng)發(fā)展成一套非常成熟的大數(shù)據(jù)處理引擎,同時被很多公司作為流數(shù)據(jù)處理平臺的底層技術。本文為大家介紹Flink的架構及其組成成分。

[[416662]]

本文轉載自微信公眾號「數(shù)倉寶貝庫」,作者張利兵。轉載本文請聯(lián)系數(shù)倉寶貝庫公眾號。

一架構介紹

Flink系統(tǒng)架構主要分為APIs & Libraries、Core和Deploy三層,如圖1所示,其中APIs層主要實現(xiàn)了面向流處理對應的DataStream API,面向批處理對應的DataSet API。Libraries層也被稱作Flink應用組件層,是根據(jù)API層的劃分,在API層之上構建滿足了特定應用領域的計算框架,分別對應了面向流處理和面向批處理兩類,其中面向流處理支持CEP(復雜事件處理)、基于類似SQL的操作(基于Table的關系操作);面向批處理支持Flink ML(機器學習庫)、Gelly(圖處理)。運行時層提供了Flink計算的全部核心實現(xiàn),例如支持分布式Stream作業(yè)執(zhí)行、JobGraph到ExecutionGraph的映射和調(diào)度等,為API層提供了基礎服務。Deploy層支持多種部署模式,包括本地、集群(Standalone、YARN、Kubernetes)及云部署(GCE/EC2)。

圖1 Flink整體架構

1、編程接口

Flink提供了多種抽象的編程接口,適用于不同層級的用戶。數(shù)據(jù)分析人員和偏向業(yè)務的數(shù)據(jù)開發(fā)人員可以使用Flink SQL定義流式作業(yè)。如圖2所示,F(xiàn)link編程接口分為4層。

圖2 Flink編程接口抽象

Flink SQL

一項大數(shù)據(jù)技術如果想被用戶接受和使用,除了應具有先進的架構理念之外,另一點非常重要的就是要具有非常好的易用性。我們知道雖然Pig中的操作更加靈活和高效,但是在都滿足數(shù)據(jù)處理需求的前提下,數(shù)據(jù)開發(fā)者更愿意選擇Hive作為大數(shù)據(jù)處理的開發(fā)工具。其中最重要的原因是,Hive能夠基于SQL標準進行拓展,提出了HQL語言,這就讓很多只會SQL的用戶也能夠快速掌握大數(shù)據(jù)處理技術。因此Hive技術很快得到普及。

對于Flink同樣如此,如果想贏得更多的用戶,就必須不斷增強易用性。FlinkSQL基于關系型概念構建流式和離線處理應用,使用戶能夠更加簡單地通過SQL構建Flink作業(yè)。

Table API

Flink SQL解析生成邏輯執(zhí)行計劃和物理執(zhí)行計劃,然后轉換為Table之間的操作,最終轉換為JobGraph并運行在集群上。Table API和Spark中的DataSet/DataFrame接口類似,都提供了面向領域語言的編程接口。相比Flink SQL,Table API更加靈活,既可以在Java & Scala SDK中與DataStream和DataSet API相互轉換,也能結合Flink SQL進行數(shù)據(jù)處理。

DataStream & DataSet API

在早期的Flink版本中,DataSet API和DataStream API分別用于流處理和批處理場景。DataSet用于處理離線數(shù)據(jù)集,DataStream用于處理流數(shù)據(jù)集。DataFlow模型希望使用同一套流處理框架統(tǒng)一處理有界和無界數(shù)據(jù),那么為什么Flink還要抽象出兩套編程接口來處理有界數(shù)據(jù)集和無界數(shù)據(jù)集呢?這也是近年來Flink社區(qū)不斷探討的話題。目前Table和SQL API層面雖然已經(jīng)能夠做到批流一體,但這僅是在邏輯層面上的,最終還是會轉換成DataSet API和DataStream API對應的作業(yè)。后期Flink社區(qū)將逐漸通過DataStream處理有界數(shù)據(jù)集和無界數(shù)據(jù)集,社區(qū)已經(jīng)在1.11版本中對DataStream API中的SourceFunction接口進行了重構,使DataStream可以接入和處理有界數(shù)據(jù)集。在后期的版本中,F(xiàn)link將逐步實現(xiàn)真正意義上的批流一體化。

Stateful Processing Function接口

Stateful Processing Function接口提供了強大且靈活的編程能力,在其中可以直接操作狀態(tài)數(shù)據(jù)、TimeService等服務,同時可以注冊事件時間和處理時間回調(diào)定時器,使程序能夠實現(xiàn)更加復雜的計算。使用Stateful Processing Function接口需要借助DataStream API。雖然Stateful Processing Function接口靈活度很高,但是接口使用復雜度也相對較高,且在DataStream API中已經(jīng)基于Stateful Process Function接口封裝了非常豐富的算子,這些算子可以直接使用,因此,除非用戶需要自定義比較復雜的算子(如直接操作狀態(tài)數(shù)據(jù)等),否則無須使用Stateful Processing Function接口開發(fā)Flink作業(yè)。

2、運行時執(zhí)行引擎

用戶使用組件棧和接口編寫的Flink作業(yè)最終都會在客戶端轉換成JobGraph對象,然后提交到集群中運行。除了任務的提交和運行之外,運行時還包含資源管理器Resource-Manager以及負責接收和執(zhí)行Task的TaskManager,這些服務各司其職,相互合作。運行時提供了不同類型(有界和無界)作業(yè)的執(zhí)行和調(diào)度功能,最終將任務拆解成Task執(zhí)行和調(diào)度。同時,運行時兼容了不同類型的集群資源管理器,可以提供不同的部署方式,并統(tǒng)一管理Slot計算資源。

3、物理部署層

物理部署層的主要功能是兼容不同的資源管理器,如支持集群部署模式的Hadoop YARN、Kubernetes及Standalone等。這些資源管理器能夠為在Flink運行時上運行的作業(yè)提供Slot計算資源。第4章會重點介紹Flink物理部署層的實現(xiàn),幫助大家了解如何將運行時運行在不同的資源管理器上并對資源管理器提供的計算資源進行有效管理。

二Flink集群架構

如圖3所示,F(xiàn)link集群主要包含3部分:JobManager、TaskManager和客戶端,三者均為獨立的JVM進程。Flink集群啟動后,會至少啟動一個JobManager和多個Task-Manager??蛻舳藢⑷蝿仗峤坏絁obManager,JobManager再將任務拆分成Task并調(diào)度到各個TaskManager中執(zhí)行,最后TaskManager將Task執(zhí)行的情況匯報給JobManager。

圖3 Flink集群架構圖

客戶端是Flink專門用于提交任務的客戶端實現(xiàn),可以運行在任何設備上,并且兼容Windows、macOS、Linux等操作系統(tǒng),只需要運行環(huán)境與JobManager之間保持網(wǎng)絡暢通即可。用戶可以通過./bin/f?link run命令或Scala Shell交互式命令行提交作業(yè)??蛻舳藭趦?nèi)部運行提交的作業(yè),然后基于作業(yè)的代碼邏輯構建JobGraph結構,最終將JobGraph提交到運行時中運行。JobGraph是客戶端和集群運行時之間約定的統(tǒng)一抽象數(shù)據(jù)結構,也就是說,不管是什么類型的作業(yè),都會通過客戶端將提交的應用程序構建成JobGraph結構,最后提交到集群上運行。

JobManager是整個集群的管理節(jié)點,負責接收和執(zhí)行來自客戶端提交的JobGraph。JobManager也會負責整個任務的Checkpoint協(xié)調(diào)工作,內(nèi)部負責協(xié)調(diào)和調(diào)度提交的任務,并將JobGraph轉換為ExecutionGraph結構,然后通過調(diào)度器調(diào)度并執(zhí)行ExecutionGraph的節(jié)點。ExecutionGraph中的ExecutionVertex節(jié)點會以Task的形式在TaskManager中執(zhí)行。

除了對Job的調(diào)度和管理之外,JobManager會對整個集群的計算資源進行統(tǒng)一管理,所有TaskManager的計算資源都會注冊到JobManager節(jié)點中,然后分配給不同的任務使用。當然,JobManager還具備非常多的功能,例如Checkpoint的觸發(fā)和協(xié)調(diào)等。

TaskManager作為整個集群的工作節(jié)點,主要作用是向集群提供計算資源,每個TaskManager都包含一定數(shù)量的內(nèi)存、CPU等計算資源。這些計算資源會被封裝成Slot資源卡槽,然后通過主節(jié)點中的ResourceManager組件進行統(tǒng)一協(xié)調(diào)和管理,而任務中并行的Task會被分配到Slot計算資源中。

根據(jù)底層集群資源管理器的不同,TaskManager的啟動方式及資源管理形式也會有所不同。例如,在基于Standalone模式的集群中,所有的TaskManager都是按照固定數(shù)量啟動的;而YARN、Kubernetes等資源管理器上創(chuàng)建的Flink集群則支持按需動態(tài)啟動TaskManager節(jié)點。

三核心概念

1、有狀態(tài)計算

在Flink架構體系中,有狀態(tài)計算是非常重要的特性之一。如圖4所示,有狀態(tài)計算是指在程序計算過程中,程序內(nèi)部存儲計算產(chǎn)生的中間結果,并將其提供給后續(xù)的算子進行計算。狀態(tài)數(shù)據(jù)可以存儲在本地內(nèi)存中,也可以存儲在第三方存儲介質中,例如Flink已經(jīng)實現(xiàn)的RocksDB。

圖4 有狀態(tài)處理和無狀態(tài)處理

和有狀態(tài)計算不同,無狀態(tài)計算不會存儲計算過程中產(chǎn)生的結果,也不會將結果用于下一步計算。程序只會在當前的計算流程中執(zhí)行,計算完成就輸出結果,然后接入下一條數(shù)據(jù),繼續(xù)處理。

無狀態(tài)計算實現(xiàn)的復雜度相對較低,實現(xiàn)起來也比較容易,但是無法應對比較復雜的業(yè)務場景,例如處理實時CEP問題,按分鐘、小時、天進行聚合計算,求取最大值、均值等聚合指標等。如果不借助Flink內(nèi)部提供的狀態(tài)存儲,一般都需要通過外部數(shù)據(jù)存儲介質,常見的有Redis等鍵值存儲系統(tǒng),才能完成復雜指標的計算。

和Storm等流處理框架不同,F(xiàn)link支持有狀態(tài)計算,可以應對更加復雜的數(shù)據(jù)計算場景。

2、時間概念與水位線機制

在DataFlow模型中,時間會被分為事件時間和處理時間兩種類型。如圖5所示,F(xiàn)link中的時間概念基本和DataFlow模型一致,且Flink在以上兩種時間概念的基礎上增加了進入時間(ingestion time)的概念,也就是數(shù)據(jù)接入到Flink系統(tǒng)時由源節(jié)點產(chǎn)生的時間。

圖5 Flink時間概念

事件時間指的是每個事件在其生產(chǎn)設備上發(fā)生的時間。通常在進入Flink之前,事件時間就已經(jīng)嵌入數(shù)據(jù)記錄,后續(xù)計算從每條記錄中提取該時間。基于事件時間,我們可以通過水位線對亂序事件進行處理。事件時間能夠準確地反映事件發(fā)生的先后關系,這對流處理系統(tǒng)而言是非常重要的。在涉及較多的網(wǎng)絡傳輸時,在傳輸過程中不可避免地會發(fā)生數(shù)據(jù)發(fā)送順序改變,最終導致流系統(tǒng)統(tǒng)計結果出現(xiàn)偏差,從而很難通過實時計算的方式得到正確的統(tǒng)計結果。

處理時間是指執(zhí)行相應算子操作的機器系統(tǒng)時間。當應用基于處理時間運行時,所有基于時間的算子操作(如時間窗口)將使用運行相應算子機器的系統(tǒng)時鐘。例如,應用程序在上午9:15運行,則第一個每小時處理時間窗口包括在上午9:15到上午10:00之間處理的事件,下一個窗口包括在上午10:00到11:00之間處理的事件。

處理時間是最簡單的時間概念,不需要在流和機器之間進行協(xié)調(diào),它提供了最佳的性能和最低的延遲。但在分布式和異步環(huán)境中,處理時間不能提供確定性,因為它容易受到記錄到達系統(tǒng)的速度(例如從消息隊列到達系統(tǒng))以及系統(tǒng)內(nèi)算子之間流動速度的影響。

接入時間是指數(shù)據(jù)接入Flink系統(tǒng)的時間,它由SourceOperator自動根據(jù)當前時鐘生成。后面所有與時間相關的Operator算子都能夠基于接入時間完成窗口統(tǒng)計等操作。接入時間的使用頻率并不高,當接入的事件不具有事件時間時,可以借助接入時間來處理數(shù)據(jù)。

相比于處理時間,接入時間的實現(xiàn)成本較高,但是它的數(shù)據(jù)只產(chǎn)生一次,且不同窗口操作可以基于統(tǒng)一的時間戳,這可以在一定程度上避免處理時間過度依賴處理算子的時鐘的問題。

不同于事件時間,接入時間不能完全刻畫出事件產(chǎn)生的先后關系。在Flink內(nèi)部,接入時間只是像事件時間一樣對待和處理,會自動分配時間戳和生成水位線。因此,基于接入時間并不能完全處理亂序時間和遲到事件。

 

本文摘編于《Flink設計與實現(xiàn):核心原理與源碼解析》,經(jīng)出版方授權發(fā)布。

 

責任編輯:武曉燕 來源: 數(shù)倉寶貝庫
相關推薦

2009-06-24 14:25:13

JSF整體架構

2016-11-04 21:46:46

UnderscoreJavascript

2016-11-25 13:14:50

Flume架構源碼

2010-08-03 14:58:38

APC

2010-09-27 16:23:28

APC

2025-07-08 08:57:29

2016-10-09 14:48:14

Linux整體架構跳板機

2017-04-14 15:42:14

2023-06-09 14:01:00

架構程序APP

2022-11-29 11:21:20

單體分層應用架構

2024-01-29 08:07:42

FlinkYARN架構

2024-08-26 10:31:23

2017-12-12 14:26:16

數(shù)據(jù)庫PostgreSQL邏輯優(yōu)化

2025-06-09 07:45:00

2010-02-06 15:32:30

Android架構

2012-07-10 16:22:01

開源架構

2009-12-07 18:43:29

WCF框架

2024-03-12 12:57:07

Redis主從架構

2017-07-05 17:47:17

架構DockerContainer

2010-03-03 13:56:24

點贊
收藏

51CTO技術棧公眾號

热久久久久久久| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品视频免费在线观看| 亚洲美女视频在线免费观看| 精品中文一区| 蜜桃精品在线观看| 欧美激情综合五月色丁香 | 欧美在线看片| 久久视频国产精品免费视频在线| 99r国产精品视频| 午夜伦全在线观看| 97在线观看播放| av一区二区在线观看| 亚洲视频一区二区在线观看| 国产a∨精品一区二区三区不卡| 成人福利影院| 日韩1区2区| 在线成人av影院| 一区二区三区电影| 色诱色偷偷久久综合| 久久色.com| 91po在线观看91精品国产性色| 九色91popny| 欧美在线观看视频一区| 色婷婷精品大在线视频| 国产伦精品一区二区三毛| 黄色网在线播放| 国产精品综合久久| 久久精品成人动漫| 午夜刺激在线| 亚洲综合国产| 日韩精品在线免费| 精品人妻一区二区三区四区在线| 国产精品任我爽爆在线播放| 精品毛片三在线观看| 欧美性bbwbbwbbwhd| 欧美日韩国产网站| 亚洲欧美一区二区三区国产精品| 韩国一区二区av| 久久久久亚洲| 波多野结衣的一区二区三区| 欧美一卡2卡3卡4卡| 57pao国产成人免费| 精品国产91久久久久久老师| 成人精品福利视频| 亚洲精品在线免费看| 日韩免费在线电影| 欧美精品日韩www.p站| 一本一道dvd在线观看免费视频| 国产亚洲在线| 久久久久99| 永久免费精品视频网站| 国产成人精品福利| 国产精品久久久久久久久久东京 | 国产精品久久久久一区二区| 97精品中文字幕| 亚洲欧洲av一区二区| 日本1区2区3区中文字幕| 奇米四色…亚洲| 少妇av一区二区三区无码| 91精品电影| 日韩欧美在线电影| 国产精品久久久久一区二区三区厕所 | 亚洲欧美日本国产| 欧美日韩国产成人在线免费| 蜜臀av无码一区二区三区| 91tv官网精品成人亚洲| 欧美国产成人精品| 男女爱爱免费网站| 西西人体一区二区| 精品成在人线av无码免费看| 欧美一区视频| 午夜久久久久久久久久久| 欧美福利电影在线观看| 小说区图片区图片区另类灬| 四季av在线一区二区三区| 日本一区二区视频| 天天超碰亚洲| 福利视频免费在线观看| 亚洲欧美成aⅴ人在线观看 | 欧美丝袜丝交足nylons| 两个人看的免费完整在线观看| 尤物yw193can在线观看| 大荫蒂性生交片| 欧美gvvideo网站| 一级一片免费播放| 久久这里精品| 久久精品国产亚洲5555| 日本精品影院| 日韩精彩视频在线观看| 午夜电影久久久| 91青青草免费观看| 青春草视频在线| 蜜桃视频一区二区三区在线观看 | 极品销魂美女一区二区三区| 成人资源在线播放| 日本一区二区动态图| 午夜在线不卡| 中文字幕亚洲欧美日韩高清| 黄色片久久久久| caoporn-草棚在线视频最| 免费成人美女在线观看.| 国产欧美日韩在线播放| 久久国产电影| 四虎国产精品永远| 91福利视频在线| 成人一级福利| 国产精品国产亚洲伊人久久| 欧美性感一类影片在线播放| 亚洲一区不卡| 嗯~啊~轻一点视频日本在线观看| 伊人网在线免费| 哺乳挤奶一区二区三区免费看| 热草久综合在线| 久草视频在线看| 亚洲人成电影网站色mp4| av成人影院在线| 国产精品综合不卡av| 不卡av免费观看| 欧美成aaa人片在线观看蜜臀| 精品在线免费观看| 久久婷婷av| 99精品国产高清一区二区| 国产在线精品一区二区| 青少年xxxxx性开放hg| 亚洲一区二区三区国产| 992tv在线影院| 亚洲免费观看高清完整版在线| 日本欧美电影在线观看| 欧美精品 国产精品| 精品人人人人| 亚洲精品天堂成人片av在线播放 | 九九九九免费视频| 亚洲另类xxxx| 欧产日产国产精品视频| 欧美系列一区二区| 亚洲精品国产九九九| 自拍偷拍亚洲色图欧美| 欧美一卡在线观看| 亚洲激情自拍| 天天好比中文综合网| 91成人网在线| sm在线播放| 奇米精品在线| 91精品久久久久久久91蜜桃 | 2019最新中文字幕| 中文字幕电影一区| 红杏aⅴ成人免费视频| 看欧美ab黄色大片视频免费| 在线日韩av观看| 日本免费精品| 国产精品亚洲欧美导航| 亚洲免费av高清| 成人在线一区| 嫩草精品影院| 狠狠色狠狠色综合人人| 狠狠狠色丁香婷婷综合激情| 国产一线二线在线观看| 偷拍视频一区二区| 日韩理论片久久| 不卡高清视频专区| 天堂在线看视频| 国产成人97精品免费看片| 99视频精品| 菠萝菠萝蜜在线观看| 欧美激情videos| 91一区二区| 福利在线播放| 日韩有码在线电影| 亚洲女同中文字幕| 成人中文字幕在线播放| 精品色蜜蜜精品视频在线观看| 欧美破处大片在线视频| 精品99在线视频| 97国产精品久久| 极品美女销魂一区二区三区| 日韩五码电影| 久草.com| 最近2019中文字幕大全第二页 | 这里只有精品66| 欧美成人精品一区二区三区| 亚洲精品国产无天堂网2021| 五月天激情在线| 欧美主播一区二区三区美女 久久精品人 | 色愁久久久久久| av成人免费观看| 欧美性高清videossexo| 亚洲狠狠婷婷| 亚洲优女在线| 欧洲成人在线视频| 一区二区三区精品视频| 青青青青在线| 精品中文字幕在线观看| 国产精品少妇自拍| 国产在线你懂得| 亚洲精品免费在线视频| 欧美日韩午夜激情| 欧美三区美女| 成人在线视频免费看| 亚洲欧洲精品天堂一级|