<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Flink 實(shí)踐 | 從 Spark 做批處理到 Flink 做流批一體

          共 12408字,需瀏覽 25分鐘

           ·

          2021-10-16 11:34

          ▼ 關(guān)注「Flink 中文社區(qū)」,獲取更多技術(shù)干貨?

          摘要:本?由社區(qū)志愿者苗文婷整理,內(nèi)容來源? LinkedIn 大數(shù)據(jù)高級(jí)開發(fā)工程師張晨婭在 Flink Forward Asia 2020 分享的《從 Spark 做批處理到 Flink 做流批一體》,主要內(nèi)容為:


          1. 為什么要做流批一體?
          2. 當(dāng)前行業(yè)已有的解決方案和現(xiàn)狀,優(yōu)勢(shì)和劣勢(shì)
          3. 探索生產(chǎn)實(shí)踐場(chǎng)景的經(jīng)驗(yàn)
          4. Shuflle Service 在 Spark 和 Flink 上的對(duì)比,以及 Flink 社區(qū)后面可以考慮做的工作
          5. 總結(jié)

          Tips:FFA 2021 重磅開啟,點(diǎn)擊「閱讀原文」即可報(bào)名~

          ?GitHub 地址?
          歡迎大家給?Flink?點(diǎn)贊送 star~

          一、為什么要做流批一體



          做流批一體到底有哪些益處,尤其是在 BI/AI/ETL 的場(chǎng)景下。整體來看,如果能幫助用戶做到流批一體,會(huì)有以上 4 個(gè)比較明顯的益處:

          • 可以避免代碼重復(fù),復(fù)用代碼核心處理邏輯

            代碼邏輯能完全一致是最好的,但這會(huì)有一定的難度。但整體來講,現(xiàn)在的商業(yè)邏輯越來越長(zhǎng),越來越復(fù)雜,要求也很多,如果我們使用不同的框架,不同的引擎,用戶每次都要重新寫一遍邏輯,壓力很大并且難以維護(hù)。所以整體來講,盡量避免代碼重復(fù),幫助用戶復(fù)用代碼邏輯,就顯得尤為重要。

          • 流批一體有兩個(gè)方向

            這兩個(gè)方向要考慮的問題很不一樣,目前 Flink 做 Streaming、Spark 做 Batch 等等一些框架在批處理或流處理上都比較成熟,都已經(jīng)產(chǎn)生了很多的單方面用戶。當(dāng)我們想幫助用戶移到另外一個(gè)方向上時(shí),比如一些商業(yè)需求,通常會(huì)分成兩類,是先從流處理開始到批處理,還是從批處理開始到流處理。之后介紹的兩個(gè)生產(chǎn)實(shí)踐場(chǎng)景案例,正好對(duì)應(yīng)這兩個(gè)方向。

          • 減少維護(hù)工作量

            避免維護(hù)多套系統(tǒng),系統(tǒng)之間的差異可能非常大,框架和引擎都不一樣,會(huì)帶來比較多的問題。如果公司內(nèi)部有多條 pipeline ,一個(gè)實(shí)時(shí)一個(gè)離線,會(huì)造成數(shù)據(jù)不一致性,因此會(huì)在數(shù)據(jù)驗(yàn)證、數(shù)據(jù)準(zhǔn)確性查詢、數(shù)據(jù)存儲(chǔ)等方面做很多工作,盡量去維護(hù)數(shù)據(jù)的一致性。

          • 學(xué)習(xí)更多

            框架和引擎很多,商業(yè)邏輯既要跑實(shí)時(shí),也要跑離線,所以,支持用戶時(shí)需要學(xué)習(xí)很多東西。

          二、當(dāng)前行業(yè)現(xiàn)狀



          Flink 和 Spark 都是同時(shí)支持流處理和批處理的引擎。我們一致認(rèn)為 Flink 的流處理做的比較好,那么它的批處理能做到多好?同時(shí),Spark 的批處理做的比較好,那么它的流處理能不能足夠幫助用戶解決現(xiàn)有的需求?

          現(xiàn)在有各種各樣的引擎框架,能不能在它們之上有一個(gè)統(tǒng)一的框架,類似于聯(lián)邦處理或者是一些簡(jiǎn)單的 physical API,比如 Beam API 或者是自定義接口。

          Beam 方面需要考慮的問題,是它在批處理和流處理上的優(yōu)化能做到多好?Beam 目前還是偏物理執(zhí)行,之后的計(jì)劃是我們需要考究的。

          LinkedIn,包括其他公司,會(huì)考慮做一些自定義接口的解決方案,考慮有一個(gè)共通的 SQL 層,通用的 SQL 或 API 層,底下跑不同的框架引擎。這里需要考慮的問題是,像 Spark 、Flink 都是比較成熟的框架了,已經(jīng)擁有大量的用戶群體。當(dāng)我們提出一個(gè)新的 API ,一個(gè)新的解決方案,用戶的接受度如何? 在公司內(nèi)部應(yīng)該如何維護(hù)一套新的解決方案?

          三、生產(chǎn)案例場(chǎng)景


          后面內(nèi)容主要聚焦在 Flink 做 batch 的效果,F(xiàn)link 和 Spark 的簡(jiǎn)單對(duì)比,以及 LinkedIn 內(nèi)部的一些解決方案。分享兩個(gè)生產(chǎn)上的實(shí)例場(chǎng)景,一個(gè)是在機(jī)器學(xué)習(xí)特征工程生成時(shí)如何做流批一體,另一個(gè)是復(fù)雜的 ETL 數(shù)據(jù)流中如何做流批一體。


          3.1 案例 A - 機(jī)器學(xué)習(xí)特征工程



          第一類方向,流處理 -> 批處理,歸類為流批一體。

          案例 A 的主體邏輯是在機(jī)器學(xué)習(xí)中做特征生成時(shí),如何從流處理到批處理的流批一體。核心的業(yè)務(wù)邏輯就是特征轉(zhuǎn)換,轉(zhuǎn)化的過程和邏輯比較復(fù)雜,用它做一些標(biāo)準(zhǔn)化。

          比如在 LinkedIn 的頁面上輸入的一些會(huì)員信息背景等,需要將這些信息提取出來標(biāo)準(zhǔn)化掉,才能進(jìn)行一些推薦,幫你找一些工作等等。當(dāng)會(huì)員的身份信息有更新時(shí),會(huì)有過濾、預(yù)處理的邏輯、包括讀取 Kafka 的過程,做特征轉(zhuǎn)換的過程中,可能會(huì)有一些小表查詢。這個(gè)邏輯是非常直接的,沒有復(fù)雜的 join 操作及其他的數(shù)據(jù)處理過程。


          以前它的 pipeline 是實(shí)時(shí)的,需要定期從離線 pipeline 中讀取補(bǔ)充信息來更新流。這種 backfill 對(duì)實(shí)時(shí)集群的壓力是很大的,在 backfill 時(shí),需要等待 backfill 工作起來,需要監(jiān)控工作流不讓實(shí)時(shí)集群宕掉。所以,用戶提出能不能做離線的 backfill,不想通過實(shí)時(shí)流處理做 backfill。

          當(dāng)前我們的用戶是使用 Beam on Samza 做流處理,他們非常熟悉 Beam API 和 Spark Dataset API,也會(huì)用 Dataset API 去做除了 backfill 之外的一些其他業(yè)務(wù)處理。

          需要特別強(qiáng)調(diào)的是, Dataset API 很多都是直接對(duì) Object 操作,對(duì) type 安全性要求很高,如果建議這些用戶直接改成 SQL 或者 DataFrame 等 workflow 是不切實(shí)際的,因?yàn)樗麄円延械臉I(yè)務(wù)邏輯都是對(duì) Object 進(jìn)行直接操作和轉(zhuǎn)化等。


          在這個(gè)案例下,我們能提供給用戶一些方案選擇,Imperative API 。看下業(yè)界提供的方案:


          • 第一個(gè)選擇是即將要統(tǒng)一化的 Flink DataStream API,此前我們?cè)谧龇桨冈u(píng)估時(shí)也有調(diào)研 Flink DataSet API(deprecated),DataStream API 可以做到統(tǒng)一,并且在流處理和批處理方面的支持都是比較完善的。但缺點(diǎn)是,畢竟是 Imperative API ,可能沒有較多的優(yōu)化,后續(xù)應(yīng)該會(huì)持續(xù)優(yōu)化。可以看下 FLIP-131: Consolidate the user-facing Dataflow SDKs/APIs (and deprecate the DataSet API) [1]? 和 FLIP-134: Batch execution for the DataStream API [2]。


          • 第二個(gè)選擇是 Spark Dataset ,也是用戶一個(gè)比較自然的選擇。可以用 Dataset API 做 Streaming,區(qū)別于 ?Flink 的 Dataset 、DataStream API 等物理 API,它是基于 Spark Dataframe SQL engine 做一些 type safety,優(yōu)化程度相對(duì)好一些。可以看下文章 Databricks: Introducing Apache Spark Datasets [3] 和 Spark Structured Streaming Programming Guide: Unsupported-operations [4]。


          • 第三個(gè)選擇是 Beam On Spark,它目前主要還是用 RDD runner,目前支持帶 optimization 的 runner 還是有一定難度的。之后會(huì)詳細(xì)說下 Beam 在案例 B 中的一些 ongoing 的工作。可以看下 Beam Documentation - Using the Apache Spark Runner [5] 和 BEAM-8470 Create a new Spark runner based on Spark Structured streaming framework [6]。



          從用戶的反饋上來說,F(xiàn)link 的 DataStream (DataSet) API 和 Spark 的 Dataset API 在用戶 interface 上是非常接近的。作為 Infra 工程師來說,想要幫用戶解決問題,對(duì) API 的熟悉程度就比較重要了。

          但是 Beam 和 Flink 、Spark 的 API 是非常不一樣的,它是 Google 的一條生態(tài)系統(tǒng),我們之前也幫助用戶解決了一些問題,他們的 workflow 是在 Beam on Samza 上,他們用 p collections 或者 p transformation 寫了一些業(yè)務(wù)邏輯,output、input 方法的 signature 都很不一樣,我們開發(fā)了一些輕量級(jí) converter 幫助用戶復(fù)用已有的業(yè)務(wù)邏輯,能夠更好的用在重新寫的 Flink 或 Spark 作業(yè)里。

          從 DAG 上來看,案例 A 是一個(gè)非常簡(jiǎn)單的業(yè)務(wù)流程,就是簡(jiǎn)單直接的對(duì) Object 進(jìn)行轉(zhuǎn)換。Flink 和 Spark 在這個(gè)案例下,性能表現(xiàn)上是非常接近的。


          通常,我們會(huì)用 Flink Dashboard UI 看一些異常、業(yè)務(wù)流程等,相比 Spark 來說是一個(gè)比較明顯的優(yōu)勢(shì)。Spark 去查詢 Driver log,查詢異常是比較麻煩的。但是 Flink 依舊有幾個(gè)需要提升的地方:

          • History Server - 支持更豐富的 Metrics 等


          Spark History Server UI 呈現(xiàn)的 metrics 比較豐富的,對(duì)用戶做性能分析的幫助是比較大的。Flink 做批處理的地方是否也能讓 Spark 用戶能看到同等的 metrics 信息量,來降低用戶的開發(fā)難度,提高用戶的開發(fā)效率。

          • 更好的批處理運(yùn)維工具


          分享一個(gè) LinkedIn 從兩三年前就在做的事情。LinkedIn 每天有 200000 的作業(yè)跑在集群上,需要更好的工具支持批處理用戶運(yùn)維自己的作業(yè),我們提供了 Dr. Elephant 和 GridBench 來幫助用戶調(diào)試和運(yùn)維自己的作業(yè)。

          Dr. Elephant 已開源,能幫助用戶更好的調(diào)試作業(yè),發(fā)現(xiàn)問題并提供建議。另外,從測(cè)試集群到生產(chǎn)集群之前,會(huì)根據(jù) Dr. Elephant 生成的報(bào)告里評(píng)估結(jié)果的分?jǐn)?shù)來決定是否允許投產(chǎn)。

          GridBench 主要是做一些數(shù)據(jù)統(tǒng)計(jì)分析,包括 CPU 的方法熱點(diǎn)分析等,幫助用戶優(yōu)化提升自己的作業(yè)。GridBench 后續(xù)也有計(jì)劃開源,可以支持各種引擎框架,包括可以把 Flink 加進(jìn)來,F(xiàn)link job 可以用 GridBench 更好的做評(píng)估。GridBench Talk: Project Optimum: Spark Performance at LinkedIn Scale [7]。

          用戶不僅可以看到 GridBench 生成的報(bào)告,Dr. Elephant 生成的報(bào)告,也可以通過命令行看到 job 的一些最基本信息,應(yīng)用 CPU 時(shí)間、資源消耗等,還可以對(duì)不同 Spark job 和 Flink job 之間進(jìn)行對(duì)比分析。

          以上就是 Flink 批處理需要提升的兩塊地方。

          3.2 案例 B - 復(fù)雜的 ETL 數(shù)據(jù)流



          第二類方向,批處理 -> 流處理,歸類為流批一體。

          ETL 數(shù)據(jù)流的核心邏輯相對(duì)復(fù)雜一些,比如包括 session window 聚合窗口,每個(gè)小時(shí)計(jì)算一次頁面的用戶瀏覽量,分不同的作業(yè),中間共享 metadata table 中的 page key,第一個(gè)作業(yè)處理 00 時(shí)間點(diǎn),第二個(gè)作業(yè)處理 01 時(shí)間點(diǎn),做一些 sessionize 的操作,最后輸出結(jié)果,分 open session、close session ,以此來做增量處理每個(gè)小時(shí)的數(shù)據(jù)。


          這個(gè) workflow 原先是通過 Spark SQL 做的離線增量處理,是純離線的增量處理。當(dāng)用戶想把作業(yè)移到線上做一些實(shí)時(shí)處理,需要重新搭建一個(gè)比如 Beam On Samza 的實(shí)時(shí)的 workflow,在搭建過程中我們和用戶有非常緊密的聯(lián)系和溝通,用戶是遇到非常多的問題的,包括整個(gè)開發(fā)邏輯的復(fù)用,確保兩條業(yè)務(wù)邏輯產(chǎn)生相同的結(jié)果,以及數(shù)據(jù)最終存儲(chǔ)的地方等等,花了很長(zhǎng)時(shí)間遷移,最終效果是不太好的。

          另外,用戶的作業(yè)邏輯里同時(shí)用 Hive 和 Spark 寫了非常多很大很復(fù)雜的 UDF ,這塊遷移也是非常大的工作量。用戶對(duì) Spark SQL 和 Spark DataFrame API 是比較熟悉的。

          上圖中的黑色實(shí)線是實(shí)時(shí)處理的過程,灰色箭頭主要是批處理的過程,相當(dāng)于是一個(gè) Lambda 的結(jié)構(gòu)。


          針對(duì)案例 B,作業(yè)中包括很多 join 和 session window,他們之前也是用 Spark SQL 開發(fā)作業(yè)的。很明顯我 們要從 Declartive API 入手,當(dāng)前提供了 3 種方案:


          • 第一個(gè)選擇是 Flink Table API/SQL ,流處理批處理都可以做,同樣的SQL,功能支持很全面,流處理和批處理也都有優(yōu)化。可以看下文章 Alibaba Cloud Blog: What's All Involved with Blink Merging with Apache Flink? [8] 和 FLINK-11439 INSERT INTO flink_sql SELECT * FROM blink_sql [9]。

          • 第二個(gè)選擇是 ?Spark DataFrame API/SQL ,也是可以用相同的 interface 做批處理和流處理,但是 Spark 的流處理支持力度還是不夠的。可以看下文章 Databricks Blog: Deep Dive into Spark SQL’s Catalyst Optimizer [10] 和 Databricks Blog: Project Tungsten: Bringing Apache Spark Closer to Bare Metal [11]。

          • 第三個(gè)選擇是 Beam Schema Aware API/SQL ,Beam 更多的是物理的 API ,在 Schema Aware API/SQL 上目前都在開展比較早期的工作,暫不考慮。所以,之后的主要分析結(jié)果和經(jīng)驗(yàn)都是從 Flink Table API/SQL 和 Spark DataFrame API/SQL 的之間的對(duì)比得出來的。可以看下文章 Beam Design Document - Schema-Aware PCollections [12] 和 Beam User Guide - Beam SQL overview [13]。


          從用戶的角度來說,F(xiàn)link Table API/SQL 和 Spark DataFrame API/SQL 是非常接近的,有一些比較小的差別,比如 keywords、rules、 join 具體怎么寫等等,也會(huì)給用戶帶來一定的困擾,會(huì)懷疑自己是不是用錯(cuò)了。

          Flink 和 Spark 都很好的集成了 Hive ,比如 HIve UDF 復(fù)用等,對(duì)案例B中的 UDF 遷移,減輕了一半的遷移壓力。

          Flink 在 pipeline 模式下的性能是明顯優(yōu)于 Spark 的,可想而知,要不要落盤對(duì)性能影響肯定是比較大的,如果需要大量落盤,每個(gè) stage 都要把數(shù)據(jù)落到磁盤上,再重新讀出來,肯定是要比不落盤的 pipeline 模式的處理性能要差的。pipeline 比較適合短小的處理,在 20 分鐘 40 分鐘還是有比較大的優(yōu)勢(shì)的,如果再長(zhǎng)的 pipeline 的容錯(cuò)性肯定不能和 batch 模式相比。Spark 的 batch 性能還是要比 Flink 好一些的。這一塊需要根據(jù)自己公司內(nèi)部的案例進(jìn)行評(píng)估。


          Flink 對(duì) window 的支持明顯比其他引擎要豐富的多,比如 session window,用戶用起來非常方便。我們用戶為了實(shí)現(xiàn) session window ,特意寫了非常多的 UDF ,包括做增量處理,把 session 全部 build 起來,把 record 拿出來做處理等等。現(xiàn)在直接用 session window operator ,省了大量的開發(fā)消耗。同時(shí) group 聚合等 window 操作也都是流批同時(shí)支持的。


          Session Window:

          // Session Event-time Window.window(Session withGap 10.minutes on $"rowtime" as $"w")
          // Session Processing-time Window (assuming a processing-time attribute "proctime").window(Session withGap 10.minutes on $"proctime" as $"w")

          Slide Window:

          // Sliding Event-time Window.window(Slide over 10.minutes every 5.minutes on $"rowtime" as $"w")
          // Sliding Processing-time Window (assuming a processing-time attribute "proctime").window(Slide over 10.minutes every 5.minutes on $"proctime" as $"w")
          // Sliding Row-count Window (assuming a processing-time attribute "proctime").window(Slide over 10.rows every 5.rows on $"proctime" as $"w")


          UDF 是在引擎框架之間遷移時(shí)最大的障礙。如果 UDF 是用 Hive 寫的,那是方便遷移的,因?yàn)椴还苁?Flink 還是 Spark 對(duì) Hive UDF 的支持都是很好的,但如果 UDF 是用 Flink 或者 Spark 寫的,遷移到任何一個(gè)引擎框架,都會(huì)遇到非常大的問題,比如遷移到 Presto 做 OLAP 近實(shí)時(shí)查詢。


          為了實(shí)現(xiàn) UDF 的復(fù)用,我們 LinkedIn 在內(nèi)部開發(fā)了一個(gè) transport 項(xiàng)目,已經(jīng)開源至 github [14]?上, 可以看下 LinkedIn 發(fā)表的博客:Transport: Towards Logical Independence Using Translatable Portable UDFs [15]。


          transport 給所有引擎框架提供一個(gè)面向用戶的 User API ,提供通用的函數(shù)開發(fā)接口,底下自動(dòng)生成基于不同引擎框架的 UDF ,比如 Presto、Hive、Spark、Flink 等。


          用一個(gè)共通的 UDF API 打通所有的引擎框架,能讓用戶復(fù)用自己的業(yè)務(wù)邏輯。用戶可以很容易的上手使用,比如如下用戶開發(fā)一個(gè) MapFromTwoArraysFunction:


          public class MapFromTwoArraysFunction extends StdUDF2{
          private StdType _mapType;
          @Override public List getInputParameterSignatures(){ return ImmutableList.of( "array[K]", "array[V]" ); }
          @Override public String getOutputParameterSignature(){ return "map(K,V)"; }}@Overridepublic void init(StdFactory stdFactory){ super.init(stdFactory);}@Overridepublic StdMap eval(StdArray a1, StdArray a2){ if(a1.size() != a2.size()) { return null; } StdMap map = getStdFactory().createMap(_mapType); for(int i = 0; i < a1.size; i++) { map.put(a1.get(i), a2.get(i)); } return map;}



          處理用戶的 SQL 遷移問題 ,用戶之前是用 Spark SQL 開發(fā)的作業(yè),之后想使用流批一體,改成 Flink SQL 。目前的引擎框架還是比較多的,LinkedIn 開發(fā)出一個(gè) coral 的解決方案,已在 github [16]?上開源,在 facebook 上也做了一些 talk ,包括和 transport UDF 一起給用戶提供一個(gè)隔離層使用戶可以更好的做到跨引擎的遷移,復(fù)用自己的業(yè)務(wù)邏輯。


          看下 coral 的執(zhí)行流程,首先作業(yè)腳本中定義 熟悉的 ASCII SQL 和 table 的屬性等,之后會(huì)生成一個(gè) Coral IR 樹狀結(jié)構(gòu),最后翻譯成各個(gè)引擎的 physical plan。



          在案例 B 分析中,流批統(tǒng)一,在集群業(yè)務(wù)量特別大的情況下,用戶對(duì)批處理的性能、穩(wěn)定性、成功率等是非常重視的。其中 Shuffle Service ,對(duì)批處理性能影響比較大。

          四、Shuffle?Service?

          在 Spark 和 Flink 上的對(duì)比



          In-memory Shuffle,Spark 和 Flink 都支持,比較快,但不支持可擴(kuò)展。


          Hash-based Shuffle ,Spark 和 Flink 都支持 , 相比 In-memory Shuffle ,容錯(cuò)性支持的更好一些,但同樣不支持可擴(kuò)展。


          Sort-based Shuffle,對(duì)大的 Shuffle 支持可擴(kuò)展,從磁盤讀上來一點(diǎn)一點(diǎn) Sort match 好再讀回去,在 FLIP-148: Introduce Sort-Based Blocking Shuffle to Flink ?[17] 中也已經(jīng)支持。


          External Shuffle Service, 在集群非常繁忙,比如在做動(dòng)態(tài)資源調(diào)度時(shí),外掛服務(wù)就會(huì)非常重要,對(duì) Shuffle 的性能和資源依賴有更好的隔離,隔離之后就可以更好的去調(diào)度資源。FLINK-11805 A Common External Shuffle Service Framework [18] 目前處于 reopen 狀態(tài)。


          Disaggregate Shuffle,大數(shù)據(jù)領(lǐng)域都倡導(dǎo) Cloud Native 云原生,計(jì)算存儲(chǔ)分離在 Shuffle Service 的設(shè)計(jì)上也是要考慮的。FLINK-10653 Introduce Pluggable Shuffle Service Architecture [19] 引入了可插拔的 Shuffle Service 架構(gòu)。



          Spark 對(duì) Shuffle Service 做了一個(gè)比較大的提升,這個(gè)工作也是由 LinkedIn 主導(dǎo)的 magnet 項(xiàng)目,形成了一篇名稱為 introducing-magnet 的論文 (Magnet: A scalable and performant shuffle architecture for Apache Spark) [20],收錄到了 LinkedIn blog 2020 里。magnet 很明顯的提升了磁盤讀寫的效率,從比較小的 random range ,到比較大的順序讀,也會(huì)做一些 merging ,而不是隨意的隨機(jī)讀取 shuffle data ,避免 random IO 的一些問題。



          通過 Magent Shuffle Service 緩解了 Shuffle 穩(wěn)定性和可擴(kuò)展性方面的問題。在此之前,我們發(fā)現(xiàn)了很多 Shuffle 方面的問題,比如 Job failure 等等非常高。如果想用 Flink 做批處理,幫助到以前用 Spark 做批處理的用戶,在 Shuffle 上確實(shí)要花更大功夫。


          • 在 Shuffle 可用性上,會(huì)采用 best-effort 方式去推 shuffle blocks,忽略一些大的 block ,保證最終的一致性和準(zhǔn)確性;

          • 為 shuffle 臨時(shí)數(shù)據(jù)生成一個(gè)副本,確保準(zhǔn)確性。

          如果 push 過程特別慢,會(huì)有提前終止技術(shù)。

          Magent Shuffle 相比 Vanilla Shuffle ,讀取 Shuffle data 的等待時(shí)間縮較少了幾乎 100%,task 執(zhí)行時(shí)間縮短了幾乎 50%,端到端的任務(wù)時(shí)長(zhǎng)也縮短了幾乎 30%。


          五、總結(jié)


          • LinkedIn 非常認(rèn)可和開心看到 Flink 在流處理和批處理上的明顯優(yōu)勢(shì),做的更加統(tǒng)一,也在持續(xù)優(yōu)化中。

          • Flink 批處理能力有待提升,如 history server,metrics,調(diào)試。用戶在開發(fā)的時(shí)候,需要從用戶社區(qū)看一些解決方案,整個(gè)生態(tài)要搭建起來,用戶才能方便的用起來。

          • Flink 需要對(duì) shuffle service 和大集群離線工作流投入更多的精力,確保 workflow 的成功率,如果規(guī)模大起來之后,如何提供更好的用戶支持和對(duì)集群進(jìn)行健康監(jiān)控等。

          • 隨著越來越多的框架引擎出現(xiàn),最好能給到用戶一個(gè)更加統(tǒng)一的 interface,這一塊的挑戰(zhàn)是比較大的,包括開發(fā)和運(yùn)維方面,根據(jù) LinkedIn 的經(jīng)驗(yàn),還是看到了很多問題的,并不是通過一個(gè)單一的解決方案,就能囊括所有的用戶使用場(chǎng)景,哪怕是一些 function 或者 expression,也很難完全覆蓋到。像 coral、transport UDF。

          原視頻:
          https://www.bilibili.com/video/BV13a4y1H7XY?p=12


          參考鏈接

          [1]?https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=158866741
          [2]?https://cwiki.apache.org/confluence/display/FLINK/FLIP-134%3A+Batch+execution+for+the+DataStream+API
          [3]?https://databricks.com/blog/2016/01/04/introducing-apache-spark-datasets.html
          [4]?https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#unsupported-operations
          [5]?https://beam.apache.org/documentation/runners/spark/
          [6]?https://issues.apache.org/jira/browse/BEAM-8470
          [7]?https://www.youtube.com/watch?v=D47CSeGpBd0
          [8]?https://www.alibabacloud.com/blog/whats-all-involved-with-blink-merging-with-apache-flink_595401
          [9]?https://issues.apache.org/jira/browse/FLINK-11439
          [10]?https://databricks.com/blog/2015/04/13/deep-dive-into-spark-sqls-catalyst-optimizer.html
          [11]?https://databricks.com/blog/2015/04/28/project-tungsten-bringing-spark-closer-to-bare-metal.html
          [12]?https://docs.google.com/document/d/1tnG2DPHZYbsomvihIpXruUmQ12pHGK0QIvXS1FOTgRc/edit#heading=h.puuotbien1gf
          [13]?https://beam.apache.org/documentation/dsls/sql/overview/
          [14]?https://github.com/linkedin/transport
          [15]?https://engineering.linkedin.com/blog/2018/11/using-translatable-portable-UDFs
          [16]?https://github.com/linkedin/coral
          [17]?https://cwiki.apache.org/confluence/display/FLINK/FLIP-148%3A+Introduce+Sort-Based+Blocking+Shuffle+to+Flink
          [18]?https://issues.apache.org/jira/browse/FLINK-11805
          [19]?https://issues.apache.org/jira/browse/FLINK-10653
          [20]?https://engineering.linkedin.com/blog/2020/introducing-magnet



          ? Flink?Forward?Asia 2021??
          報(bào)名現(xiàn)已開放

          Flink Forward Asia 2021 重磅啟動(dòng)!FFA 2021 將于 12 月 4-5 日在北京·國家會(huì)議中心舉辦,預(yù)計(jì)將有 3000+ 開發(fā)者參與,探討交流 Flink 最新動(dòng)態(tài)。報(bào)名通道已開啟,掃描下圖二維碼,或點(diǎn)擊文末「閱讀原文」即可報(bào)名 FFA 2021~




          更多 Flink 相關(guān)技術(shù)問題,可掃碼加入社區(qū)釘釘交流群~

          ???戳我,報(bào)名 FFA 2021 大會(huì)!

          瀏覽 67
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  俺去俺来也WWW色老板 | 大香蕉最新视频 | 麻豆视频一区 | 亚州精品无码视频 | 想xx视频 |