您好,登錄后才能下訂單哦!
這篇文章主要講解了“Flink體系結(jié)構(gòu)和運(yùn)行架構(gòu)是怎樣的”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Flink體系結(jié)構(gòu)和運(yùn)行架構(gòu)是怎樣的”吧!
像大多數(shù)大數(shù)據(jù)框架一樣,F(xiàn)link是非常經(jīng)典的Master/Slave結(jié)構(gòu)實(shí)現(xiàn),JobManager是Master,TaskManager是Slave。
協(xié)調(diào)分布式執(zhí)行,它們用來調(diào)度task,協(xié)調(diào)檢查點(diǎn)(CheckPoint),協(xié)調(diào)失敗時(shí)恢復(fù)等,F(xiàn)link運(yùn)行時(shí)至少存在一個(gè)master處理器,如果配置高可用模式則會(huì)存在多個(gè)master處理器,它們其中有一個(gè)是leader,而其他的都是standby。JobManager接收的應(yīng)用包括jar和JobGraph。
處理器也稱之為Worker,主要職責(zé)是從JobManager處接收任務(wù), 并部署和啟動(dòng)任務(wù), 接收上游的數(shù)據(jù)并處理,Task Manager 是在 JVM 中的一個(gè)或多個(gè)線程中執(zhí)行任務(wù)的工作節(jié)點(diǎn),TaskManager在啟動(dòng)的時(shí)候會(huì)向ResourceManager注冊(cè)自己的資源信息(Slot的數(shù)量等)。
針對(duì)不同的環(huán)境和資源提供者,如(YARN,Me搜索,Kubernetes或獨(dú)立部署),F(xiàn)link提供了不同的ResourceManager,其作用是負(fù)責(zé)Flink的資源處理單元:slot, 可以理解為cpu和內(nèi)存資源
提供一個(gè)REST接口來讓我們提交需要執(zhí)行的應(yīng)用。一旦一個(gè)應(yīng)用提交執(zhí)行,Dispatcher會(huì)啟動(dòng)一個(gè)JobManager,并將應(yīng)用轉(zhuǎn)交給他。Dispatcher還會(huì)啟動(dòng)一個(gè)webUI來提供有關(guān)作業(yè)執(zhí)行信息 注意:某些應(yīng)用的提交執(zhí)行的方式,有可能用不到Dispatcher。
上面各個(gè)組件的關(guān)系,可以參考下圖:
運(yùn)行架構(gòu)與體系結(jié)構(gòu)的區(qū)別是,體系結(jié)構(gòu)主要指Flink在實(shí)體機(jī)器上的體現(xiàn),是由什么進(jìn)程,整個(gè)流程體系如何,而運(yùn)行架構(gòu)指的是一個(gè)程序提交后,走了哪些抽象流程
Flink程序的基本構(gòu)建塊是流和轉(zhuǎn)換(請(qǐng)注意,F(xiàn)link的DataSet API中使用的DataSet也是內(nèi)部流 )。從概念上講,流是(可能永無止境的)數(shù)據(jù)記錄流,而轉(zhuǎn)換是將一個(gè)或多個(gè)流輸入,并產(chǎn)生一個(gè)或多個(gè)輸出流
上圖表述了Flink的應(yīng)用程序結(jié)構(gòu),有Source(源頭)、Transformation(轉(zhuǎn)換)、Sink(接收器)三個(gè)重要組成部 分 Source 數(shù)據(jù)源,定義Flink從哪里加載數(shù)據(jù),F(xiàn)link 在流處理和批處理上的 source 大概有 4 類:基于本地集合的 source、基于文件的 source、基于網(wǎng)絡(luò)套接字的 source、自定義的 source。自定義的 source 常見的有 Apache kafka、RabbitMQ 等。 Transformation 數(shù)據(jù)轉(zhuǎn)換的各種操作,也稱之為算子,有 Map / FlatMap / Filter / KeyBy / Reduce / Window等,可以將數(shù)據(jù) 轉(zhuǎn)換計(jì)算成你想要的數(shù)據(jù)。 Sink 接收器,F(xiàn)link 將轉(zhuǎn)換計(jì)算后的數(shù)據(jù)發(fā)送的地點(diǎn) ,定義了結(jié)果數(shù)據(jù)的輸出方向,F(xiàn)link 常見的 Sink 大概有如下幾 類:寫入文件、打印出來、寫入 socket 、自定義的 sink 。自定義的 sink 常見的有 Apache kafka、 RabbitMQ、MySQL、ElasticSearch、Apache Cassandra、HDFS等。
Task 是一個(gè)階段多個(gè)功能相同 SubTask 的集合,類似于 Spark 中的 TaskSet。
SubTask(子任務(wù)) SubTask 是 Flink 中任務(wù)最小執(zhí)行單元,是一個(gè) Java 類的實(shí)例,這個(gè) Java 類中有屬性和方法,完成具體的計(jì)算 邏輯,比如一個(gè)執(zhí)行操作map,分布式的場景下會(huì)在多個(gè)線程中同時(shí)執(zhí)行,每個(gè)線程中執(zhí)行的都叫做一個(gè) SubTask
Flink的所有操作都稱之為Operator,客戶端在提交任務(wù)的時(shí)候會(huì)對(duì)Operator進(jìn)行優(yōu)化操作,能進(jìn)行合并的Operator 會(huì)被合并為一個(gè)Operator,合并后的Operator稱為Operator chain,實(shí)際上就是一個(gè)執(zhí)行鏈,每個(gè)執(zhí)行鏈會(huì)在 TaskManager上一個(gè)獨(dú)立的線程中執(zhí)行。shuffle
在運(yùn)行過程中,應(yīng)用中的任務(wù)會(huì)持續(xù)進(jìn)行數(shù)據(jù)交換。為了有效利用網(wǎng)絡(luò)資源和提高吞吐量,F(xiàn)link在處理任務(wù)間的數(shù)據(jù)傳輸過程中,采用了緩沖區(qū)機(jī)制
任務(wù)槽也叫做task-slot、槽共享也叫做slot sharing
每個(gè)TaskManager是一個(gè)JVM的進(jìn)程, 可以在不同的線程中執(zhí)行一個(gè)或多個(gè)子任務(wù)。為了控制一個(gè)worker能接收多少個(gè)task。worker通過task slot來進(jìn)行控制(一個(gè)worker至少有一個(gè)task slot)
任務(wù)槽
每個(gè)task slot表示TaskManager擁有資源的一個(gè)固定大小的子集。 一般來說:我們分配槽的個(gè)數(shù)都是和CPU的核 數(shù)相等,比如6核,那么就分配6個(gè)槽. Flink將進(jìn)程的內(nèi)存進(jìn)行了劃分到多個(gè)Slot中。假設(shè)一個(gè)TaskManager機(jī)器有3個(gè)slot,那么每個(gè)slot占有1/3的內(nèi) 存(平分)。
內(nèi)存被劃分到不同的slot之后可以獲得如下好處: TaskManager最多能同時(shí)并發(fā)執(zhí)行的任務(wù)是可以控制的,那就是3個(gè),因?yàn)椴荒艹^slot的數(shù)量 slot有獨(dú)占的內(nèi)存空間,這樣在一個(gè)TaskManager中可以運(yùn)行多個(gè)不同的作業(yè),作業(yè)之間不受影
槽共享
默認(rèn)情況下,F(xiàn)link允許子任務(wù)subtast(map[1] map[2] keyby[1] keyby[2] 共享插槽,即使它們是不同任務(wù)的 子任務(wù),只要它們來自同一個(gè)作業(yè)。結(jié)果是一個(gè)槽可以保存作業(yè)的整個(gè)管道
感謝各位的閱讀,以上就是“Flink體系結(jié)構(gòu)和運(yùn)行架構(gòu)是怎樣的”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Flink體系結(jié)構(gòu)和運(yùn)行架構(gòu)是怎樣的這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。