自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Flink 是如何統(tǒng)一批流引擎的

開發(fā) 架構(gòu)
2015 年,F(xiàn)link 的作者就寫了 Apache Flink: Stream and Batch Processing in a Single Engine 這篇論文。本文以這篇論文為引導(dǎo),詳細(xì)講講 Flink 內(nèi)部是如何設(shè)計(jì)并實(shí)現(xiàn)批流一體的架構(gòu)。

[[437216]]

本文轉(zhuǎn)載自微信公眾號(hào)「大數(shù)據(jù)技術(shù)派」,作者柯廣 。轉(zhuǎn)載本文請(qǐng)聯(lián)系大數(shù)據(jù)技術(shù)派公眾號(hào)。

2015 年,F(xiàn)link 的作者就寫了 Apache Flink: Stream and Batch Processing in a Single Engine 這篇論文。本文以這篇論文為引導(dǎo),詳細(xì)講講 Flink 內(nèi)部是如何設(shè)計(jì)并實(shí)現(xiàn)批流一體的架構(gòu)。

前言

unify-blocks

通常我們?cè)?Flink 中說批流一體指的是這四個(gè)方向,其中 Runtime 便是 Flink 運(yùn)行時(shí)的實(shí)現(xiàn)。

數(shù)據(jù)交換模型

Flink 對(duì)于流作業(yè)和批作業(yè)有一個(gè)統(tǒng)一的執(zhí)行模型。

unify-exec

Flink 中每個(gè) Task 的輸出會(huì)以 IntermediateResult 做封裝,內(nèi)部并沒有對(duì)流和批兩種作業(yè)做一個(gè)明確的劃分,只是通過不同類型的 IntermediateResult 來表達(dá) PIPELINED 和 BLOCKING 這兩大類數(shù)據(jù)交換模型。

在了解數(shù)據(jù)交換模型之前,我們來看下為什么 Flink 對(duì)作業(yè)類型不作區(qū)分,這樣的好處是什么?

unify-example

如上圖所示,假如我們有一個(gè)工作需要將批式作業(yè)執(zhí)行結(jié)果作為流式作業(yè)的啟動(dòng)輸入,那怎么辦?這個(gè)作業(yè)是算批作業(yè)還是流作業(yè)?

很顯然,以我們的常識(shí)是無法定義的,而現(xiàn)有的工業(yè)界的辦法也是如此,將這個(gè)作業(yè)拆分為兩個(gè)作業(yè),先跑批式作業(yè),再跑流式作業(yè),這樣當(dāng)然可以,但是人工運(yùn)維的成本也是足夠大的:

需要一個(gè)外界存儲(chǔ)來管理批作業(yè)的輸出數(shù)據(jù)。

需要一個(gè)支持批流作業(yè)依賴的調(diào)度系統(tǒng)。

如果期望實(shí)現(xiàn)這樣一個(gè)作業(yè),那么首先執(zhí)行這個(gè)作業(yè)的計(jì)算引擎的作業(yè)屬性就不能對(duì)批作業(yè)和流作業(yè)進(jìn)行強(qiáng)綁定。那么 Flink 能否實(shí)現(xiàn)這樣的需求呢?我們先來看看數(shù)據(jù)交換的具體細(xì)節(jié),最后再來一起看看這個(gè)作業(yè)的可行性。

我們以 PIPELINED 數(shù)據(jù)交換模型為例,看看是如何設(shè)計(jì)的:

unify-pipelined

PIPELINED 模式下,RecordWriter 將數(shù)據(jù)放入到 Buffer 中,根據(jù) Key 的路由規(guī)則發(fā)送給對(duì)應(yīng)的 Partition,Partition 將自己的數(shù)據(jù)封裝到 Reader 中放入隊(duì)列,讓 Netty Server 從隊(duì)列中讀取數(shù)據(jù),發(fā)送給下游。

我們將數(shù)據(jù)交換模式改為 BLOCKING,會(huì)發(fā)現(xiàn)這個(gè)設(shè)計(jì)也是同樣可行的。Partition 將數(shù)據(jù)寫入到文件,而 Reader 中維護(hù)著文件的句柄,上游任務(wù)結(jié)束后調(diào)度下游任務(wù),而下游任務(wù)通過 Netty Client 的 Partition Request 喚醒對(duì)應(yīng)的 Partition 和 Reader,將數(shù)據(jù)拉到下游。

調(diào)度模型

有 LAZY 和 EAGER 兩種調(diào)度模型,默認(rèn)情況下流作業(yè)使用 EAGER,批作業(yè)使用 LAZY。

EAGER

這個(gè)很好理解,因?yàn)榱魇阶鳂I(yè)是 All or Nothing 的設(shè)計(jì),要么所有 Task 都 Run 起來,要么就不跑。

LAZY

LAZY 模式就是先調(diào)度上游,等待上游產(chǎn)生數(shù)據(jù)或結(jié)束后再調(diào)度下游。有些類似 Spark 中的 Stage 執(zhí)行模式。

Region Scheduling

可以看到,不管是 EAGER 還是 LAZY 都沒有辦法執(zhí)行我們剛才提出的批流混合的任務(wù),于是社區(qū)提出了 Region Scheduling 來統(tǒng)一批流作業(yè)的調(diào)度,我們先看一下如何定義 Region:

unify-region

以 Join 算子為例,我們都知道如果 Join 算子的兩個(gè)輸入都是海量數(shù)據(jù)的話,那么我們是需要等兩個(gè)輸入的數(shù)據(jù)都完全準(zhǔn)備好才能進(jìn)行 Join 操作的,所以 Join 兩條輸入的邊對(duì)應(yīng)的數(shù)據(jù)交換模式對(duì)應(yīng)的應(yīng)該是 BLOCKING 模式,我們可以根據(jù) BLOCKING 的邊將作業(yè)劃分為多個(gè)子 Region,如上圖虛線所示。

如果實(shí)現(xiàn)了 Region Scheduling 之后,我們?cè)谏厦嫣岬降呐骰旌系淖鳂I(yè)就可以將深色部分流式作業(yè)劃為一個(gè) Region,淺色部分批式作業(yè)再劃分為多個(gè) Region,而淺色部分是深色部分 Region 的輸入,所以根據(jù) Region Scheduling 的原則會(huì)優(yōu)先調(diào)度最前面的 Region。

總結(jié)

上面提到了數(shù)據(jù)交換模型和調(diào)度模型,簡(jiǎn)單來講其實(shí)就兩句話:

1 實(shí)現(xiàn)了用 PIPELINED 模型去跑批式作業(yè)

用 PIPELINED 模型跑流式作業(yè)和用 BLOCKING 模型跑批式作業(yè)都是沒有什么新奇的。這里提到用 PIPELINED 模式跑批作業(yè),主要是針對(duì)實(shí)時(shí)分析的場(chǎng)景,以 Spark 為例,在大部分出現(xiàn) Shuffle 或是聚合的場(chǎng)景下都會(huì)出現(xiàn)落盤的行為,并且調(diào)度順序是一個(gè)一個(gè) Stage 進(jìn)行調(diào)度,極大地降低了數(shù)據(jù)處理的實(shí)時(shí)性,而使用 PIPELINED 模式會(huì)對(duì)性能有一定提升。

可能有人會(huì)問類似 Join 的算子如何使用 PIPELINED 數(shù)據(jù)交換模型實(shí)現(xiàn)不落盤的操作?事實(shí)上 Flink 也會(huì)落盤,只不過不是在 Join 的兩個(gè)輸入端落盤,而是將兩個(gè)輸入端的數(shù)據(jù)傳輸?shù)?Join 算子上,內(nèi)存撐不住時(shí)再進(jìn)行落盤,海量數(shù)據(jù)下和 Spark 的行為并沒有本質(zhì)區(qū)別,但是在數(shù)據(jù)量中等,內(nèi)存可容納的情況下會(huì)帶來很大的收益。

2 集成了一部分調(diào)度系統(tǒng)的功能

 

根據(jù) Region 來調(diào)度作業(yè)時(shí),Region 內(nèi)部跑的具體是流作業(yè)還是批作業(yè),F(xiàn)link 自身是不關(guān)心的,更關(guān)心的 Region 之間的依賴關(guān)系,一定程度上,利用這種調(diào)度模型我們可以將過去需要拆分為多個(gè)作業(yè)的執(zhí)行模式放到一個(gè)作業(yè)中來執(zhí)行,比如上面提到的批流混合的作業(yè)。

 

責(zé)任編輯:武曉燕 來源: 大數(shù)據(jù)技術(shù)派
相關(guān)推薦

2020-01-13 14:39:06

FlinkSQL無限流

2020-12-28 10:36:18

AD桌面壁紙操作手冊(cè)

2024-01-12 07:07:59

2023-04-18 07:49:06

2020-01-20 09:49:58

華為騰訊百度

2010-04-21 10:58:35

互聯(lián)網(wǎng)

2013-03-05 10:17:20

云計(jì)算應(yīng)用

2013-12-23 15:11:34

創(chuàng)業(yè)客戶

2018-08-20 09:11:14

企業(yè)專業(yè)能力

2022-09-05 15:29:52

Windows 11微軟功能

2019-04-16 14:12:29

AI機(jī)器學(xué)習(xí)TensorFlow

2018-07-20 09:24:37

人工智能創(chuàng)業(yè)人才

2014-02-19 14:25:47

虛擬運(yùn)營(yíng)商

2018-07-23 15:10:37

AI人工智能數(shù)據(jù)標(biāo)注

2020-03-19 08:55:56

中臺(tái)數(shù)字化企業(yè)

2021-10-14 11:34:05

技術(shù)工作流引擎

2012-03-18 19:50:36

Windows 8

2020-11-24 10:26:08

2017-07-04 13:23:01

大數(shù)據(jù)數(shù)字化革命跨界

2019-07-01 15:40:53

大數(shù)據(jù)架構(gòu)流處理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)