<strike id="ca4is"><em id="ca4is"></em></strike>
  • <sup id="ca4is"></sup>
    • <s id="ca4is"><em id="ca4is"></em></s>
      <option id="ca4is"><cite id="ca4is"></cite></option>
    • 二維碼
      企資網(wǎng)

      掃一掃關(guān)注

      當(dāng)前位置: 首頁 » 企資快報(bào) » 服務(wù) » 正文

      Apache_Flink_在京東的實(shí)踐與優(yōu)化

      放大字體  縮小字體 發(fā)布日期:2021-09-05 20:29:38    作者:媒體小英    瀏覽次數(shù):34
      導(dǎo)讀

      本文整理自京東高級(jí)技術(shù)專家付海濤在 Flink Forward Asia 2020 分享的議題《Apache Flink 在京東的實(shí)踐與優(yōu)化》,內(nèi)容包括:1.業(yè)務(wù)演進(jìn)和規(guī)模2.容器化實(shí)踐3.Flink 優(yōu)化改進(jìn)4.未來規(guī)劃一、業(yè)務(wù)演進(jìn)和規(guī)模1. 業(yè)務(wù)演進(jìn)

      本文整理自京東高級(jí)技術(shù)專家付海濤在 Flink Forward Asia 2020 分享的議題《Apache Flink 在京東的實(shí)踐與優(yōu)化》,內(nèi)容包括:

      1.業(yè)務(wù)演進(jìn)和規(guī)模

      2.容器化實(shí)踐

      3.Flink 優(yōu)化改進(jìn)

      4.未來規(guī)劃

      一、業(yè)務(wù)演進(jìn)和規(guī)模

      1. 業(yè)務(wù)演進(jìn)

      京東在 2014 年基于 storm 打造了第一代流式處理平臺(tái),可以較好的滿足業(yè)務(wù)對(duì)于數(shù)據(jù)處理實(shí)時(shí)性的要求。不過它有一些局限性,對(duì)于那些數(shù)據(jù)量特別大,但是對(duì)延遲卻不那么敏感的業(yè)務(wù)場(chǎng)景,顯得有些力不從心。于是我們?cè)?2017 年引入了 Spark streaming,利用它的微批處理來應(yīng)對(duì)這種業(yè)務(wù)場(chǎng)景。

      隨著業(yè)務(wù)的發(fā)展和業(yè)務(wù)規(guī)模的擴(kuò)大,我們迫切需要一種兼具低延遲和高吞吐能力,同時(shí)支持窗口計(jì)算、狀態(tài)和恰好一次語義的計(jì)算引擎。

    • 于是在 2018 年,我們引入了 Flink,同時(shí)開始基于 K8s 進(jìn)行實(shí)時(shí)計(jì)算容器化的升級(jí)改造;
    • 到了 2019 年,我們所有的實(shí)時(shí)計(jì)算任務(wù)都跑在 K8s 上了。同年我們基于 Flink 1.8 打造了全新的 SQL 平臺(tái),方便業(yè)務(wù)開發(fā)實(shí)時(shí)計(jì)算應(yīng)用;
    • 到了 2020 年,基于 Flink 和 K8s 打造的全新實(shí)時(shí)計(jì)算平臺(tái)已經(jīng)比較完善了,我們進(jìn)行了計(jì)算引擎的統(tǒng)一,同時(shí)支持智能診斷,來降低用戶開發(fā)和運(yùn)維應(yīng)用的成本和難度。在過去,流處理是我們關(guān)注的一個(gè)重點(diǎn)。同年,我們也開始支持批處理,于是整個(gè)實(shí)時(shí)計(jì)算平臺(tái)開始朝著批流一體的方向演進(jìn)。

      2. 業(yè)務(wù)場(chǎng)景

      京東 Flink 服務(wù)于京東內(nèi)部非常多的業(yè)務(wù)線,主要應(yīng)用場(chǎng)景包括實(shí)時(shí)數(shù)倉(cāng)、實(shí)時(shí)大屏、實(shí)時(shí)推薦、實(shí)時(shí)報(bào)表、實(shí)時(shí)風(fēng)控和實(shí)時(shí)監(jiān)控,當(dāng)然還有其他一些應(yīng)用場(chǎng)景??傊?,實(shí)時(shí)計(jì)算的業(yè)務(wù)需求,一般都會(huì)用 Flink 進(jìn)行開發(fā)。

      3. 業(yè)務(wù)規(guī)模

      目前我們的 K8s 集群由 5000 多臺(tái)機(jī)器組成,服務(wù)了京東內(nèi)部 20 多個(gè)一級(jí)部門。目前在線的流計(jì)算任務(wù)數(shù)有 3000 多,流計(jì)算的處理峰值達(dá)到 5億條每秒。

      二、容器化實(shí)踐

      下面分享一下容器化的實(shí)踐。

      在 2017 年,京東內(nèi)部的大多數(shù)任務(wù)還是 storm 任務(wù),它們都是跑在物理機(jī)上的,同時(shí)還有一小部分的 Spark streaming 跑在 Yarn 上。不同的運(yùn)行環(huán)境導(dǎo)致部署和運(yùn)維的成本特別高,并且在資源利用上有一定的浪費(fèi),所以我們迫切需要一個(gè)統(tǒng)一集群資源管理和調(diào)度系統(tǒng),來解決這個(gè)問題。

      經(jīng)過一系列的嘗試、對(duì)比和優(yōu)化,我們選擇了 K8s。它不僅可以解決部署運(yùn)維、資源利用的一些問題,還具有云原生彈性自愈、天然容器完整隔離、更易擴(kuò)展遷移等優(yōu)點(diǎn)。于是在 2018 年初,我們開始進(jìn)行容器化的升級(jí)改造。

      在 2018 年的 6.18,我們只有 20% 的任務(wù)跑在 K8s 上;到了 2019 年 2 月份,已經(jīng)實(shí)現(xiàn)了實(shí)時(shí)計(jì)算的所有任務(wù)都跑在 K8s 上。容器化后的實(shí)時(shí)計(jì)算平臺(tái)經(jīng)歷了 6.18,雙 11 多次大促,扛住了洪峰壓力,運(yùn)行的非常穩(wěn)定。

      但是,我們過去的 Flink 容器化方案是基于資源預(yù)先分配的靜態(tài)方式,不能滿足很多業(yè)務(wù)場(chǎng)景,于是我們?cè)?2020 年也進(jìn)行了一個(gè)容器化方案的升級(jí),后面會(huì)詳細(xì)介紹。

      容器化帶來非常多的收益,這里主要強(qiáng)調(diào)三點(diǎn):

    • 第一,可以很方便的實(shí)現(xiàn)服務(wù)的混合部署,極大地提升資源共享能力,節(jié)省機(jī)器資源。
    • 第二,天然的彈性擴(kuò)展,一定的自愈能力,并且它可以做到一個(gè)更完整的資源隔離,更好的保障業(yè)務(wù)的穩(wěn)定性。
    • 第三,通過容器化實(shí)現(xiàn)了開發(fā)、測(cè)試、生產(chǎn)的一致環(huán)境,同時(shí)提高了部署和自動(dòng)化運(yùn)維的能力,使管理和運(yùn)維的成本降低了一半。

      我們過去的容器化方案是基于 K8s deployment 部署的 Standalone Session 集群。它需要用戶在平臺(tái)創(chuàng)建集群時(shí),事先預(yù)估出集群所需資源,比如需要的 jobmanager 和 taskmanager 的資源規(guī)格和個(gè)數(shù),然后平臺(tái)通過 K8s 客戶端向 K8s master 發(fā)出請(qǐng)求,來創(chuàng)建 jobmanager 的 deployment 和 taskmanager 的 deployment。

      其中,整個(gè)集群的高可用是基于 ZK 實(shí)現(xiàn);狀態(tài)存儲(chǔ)主要是存在 HDFS,有小部分存在 OSS;監(jiān)控指標(biāo) (容器指標(biāo)、JVM 指標(biāo)、任務(wù)指標(biāo)) 上報(bào)到 Prometheus,結(jié)合 Grafana 實(shí)現(xiàn)指標(biāo)的直觀展示;日志是基于我們京東內(nèi)部的 Logbook 系統(tǒng)進(jìn)行采集、存儲(chǔ)和查詢。

      在實(shí)踐中發(fā)現(xiàn),這個(gè)方案有兩點(diǎn)不足:

    • 第一,資源需要提前分配,無法滿足靈活多變的業(yè)務(wù)需要,無法做到按需分配。
    • 第二,極端場(chǎng)景下 Pod 不能正常拉起, 影響任務(wù)恢復(fù) 。

      于是我們進(jìn)行了一個(gè)容器化方案的升級(jí),實(shí)現(xiàn)了基于 K8s 的動(dòng)態(tài)的資源分配方式。在集群創(chuàng)建的時(shí)候,首先我們會(huì)根據(jù)用戶指定的 job manager 的數(shù)量創(chuàng)建 jobmanager 的 deployment;用戶在提交任務(wù)的時(shí)候,我們會(huì)根據(jù)任務(wù)所需要的資源數(shù),動(dòng)態(tài)的向平臺(tái)申請(qǐng)資源,創(chuàng)建 taskmanager。

      在運(yùn)行過程中,如果發(fā)現(xiàn)這個(gè)任務(wù)需要擴(kuò)容,job manager 會(huì)和平臺(tái)交互,進(jìn)行動(dòng)態(tài)擴(kuò)容;而在發(fā)現(xiàn)資源浪費(fèi)時(shí),會(huì)進(jìn)行縮容。通過這樣一個(gè)方式可以很好的解決靜態(tài)預(yù)分配帶來的問題,并提高了資源利用率。

      此處,通過平臺(tái)與 K8s 交互進(jìn)行資源的創(chuàng)建&銷毀,主要基于 4 點(diǎn)考慮:

    • 保證了計(jì)算平臺(tái)對(duì)資源的監(jiān)管。
    • 避免了平臺(tái)集群配置 & 邏輯變化對(duì)鏡像的影響。
    • 屏蔽了不同容器平臺(tái)的差異。
    • 平臺(tái)原有 K8s 交互相關(guān)代碼復(fù)用。

      另外,為了兼容原有 Slot 分配策略 (按 slot 分散),在提交任務(wù)時(shí)會(huì)預(yù)估出任務(wù)所需資源并一次性申請(qǐng),同時(shí)按照一定的策略進(jìn)行等待。等到有足夠的資源,能滿足任務(wù)運(yùn)行的需求時(shí),再進(jìn)行 slot 的分配。這樣很大程度上可以兼容原有的 slot 分散分配策略。

      三、Flink 優(yōu)化改進(jìn)

      下面介紹一下 Flink 的優(yōu)化改進(jìn)。

      1、預(yù)覽拓?fù)?/span>

      在業(yè)務(wù)使用平臺(tái)的過程中,我們發(fā)現(xiàn)有幾個(gè)業(yè)務(wù)痛點(diǎn):

    • 第一,任務(wù)調(diào)優(yōu)繁瑣。在平臺(tái)提交任務(wù)、運(yùn)行之后如果要調(diào)整任務(wù)并行度、Slot 分組、Chaining 策略等,需要重新修改程序,或者通過命令行參數(shù)配置的方式進(jìn)行調(diào)優(yōu),這是非常繁瑣的。
    • 第二,SQL 任務(wù)無法靈活指定算子配置。
    • 第三,任務(wù)提交到集群之后,到底需要多少資源,任務(wù)所需 Slot 數(shù)預(yù)先不清楚。
    • 第四,并行度調(diào)整后網(wǎng)絡(luò) buffer 不足。

      為了解決這些問題,我們開發(fā)了預(yù)覽拓?fù)涞墓δ埽?/span>

    • 第一,拓?fù)渑渲谩S脩籼峤蝗蝿?wù)到平臺(tái)之后,我們會(huì)把拓?fù)浣o預(yù)覽出來,允許它靈活的配置這些算子的并行度。
    • 第二,槽位分組預(yù)覽。我們會(huì)清晰的顯示出任務(wù)的槽位分組情況和需要多少個(gè)槽。
    • 第三,網(wǎng)絡(luò) Buffer 預(yù)估。這樣可以最大限度的方便用戶在平臺(tái)進(jìn)行業(yè)務(wù)的調(diào)整和調(diào)優(yōu)。

      下面簡(jiǎn)單介紹預(yù)覽拓?fù)涞墓ぷ髁鞒獭S脩粼谄脚_(tái)提交 SQL 作業(yè)或 Jar 作業(yè),這個(gè)作業(yè)提交之后,會(huì)生成一個(gè)算子的配置信息,再反饋到我們平臺(tái)。我們平臺(tái)會(huì)把整個(gè)拓?fù)鋱D預(yù)覽出來,然后用戶就可以在線進(jìn)行算子配置信息的調(diào)整。調(diào)整完之后,把調(diào)整完的配置信息重新提交到我們平臺(tái)。并且,這個(gè)過程可以是連續(xù)調(diào)整的,用戶調(diào)整完覺得 ok 了就可以提交任務(wù)。提交任務(wù)之后,整個(gè)在線調(diào)整的參數(shù)就生效了。

      這里任務(wù)可以多次提交,如何保證前后兩次提交生成算子穩(wěn)定的對(duì)應(yīng)關(guān)系呢?我們采用這樣一個(gè)策略:如果你指定了 uidHash 或者 uid,我們就可以拿 uidHash 和 uid 作為這樣一個(gè)對(duì)應(yīng)關(guān)系的 Key。如果沒有,我們會(huì)遍歷整個(gè)拓?fù)鋱D,按照廣度優(yōu)先的順序,根據(jù)算子在拓?fù)鋱D中的位置生成確定的唯一的 ID。拿到唯一的 ID 之后,就可以得到一個(gè)確定的關(guān)系了。

      2、背壓量化

      下面介紹一下我們的第二個(gè)改進(jìn),背壓量化。目前觀測(cè)背壓有兩種方式:

    • 第一種方式是通過 Flink UI 的背壓面板,可以非常直觀的查看當(dāng)前的背壓情況。但是它也有些問題:第一,有的場(chǎng)景下采集不到背壓。第二,無法跟蹤歷史背壓情況。第三,背壓影響不直觀。第四,在大并行度的時(shí)候背壓采集會(huì)有一定的壓力。
    • 另外一種觀測(cè)背壓的方式是基于 Flink Task Metrics 指標(biāo)。比如說,它會(huì)上報(bào) inPoolUsage、outPoolUsage 這些指標(biāo),然后把它采集到 Prometheus 進(jìn)行一個(gè)查詢,這種方式可以解決背壓歷史跟蹤的問題。不過它有其他一些問題:第一,不同 Flink 版本的背壓指標(biāo)含義有一定差異。第二,分析背壓有一定門檻,你需要對(duì)整個(gè)背壓相關(guān)的指標(biāo)有比較深的認(rèn)識(shí),聯(lián)合進(jìn)行分析。第三,背壓的影響不是那么直觀,很難衡量它對(duì)業(yè)務(wù)的影響。

      針對(duì)這個(gè)問題,我們的解決方案是采集背壓發(fā)生的位置、時(shí)間和次數(shù)指標(biāo),然后上報(bào)上去。將量化的背壓監(jiān)控指標(biāo)與運(yùn)行時(shí)拓?fù)浣Y(jié)合起來,就可以很直觀的看到背壓產(chǎn)生的影響 (影響任務(wù)的位置、時(shí)長(zhǎng)和次數(shù))。

      3、文件系統(tǒng)支持多配置

      下面介紹下文件系統(tǒng)支持多配置的功能。

      目前在 Flink 中使用文件系統(tǒng)時(shí),會(huì)使用 FileSystem.get 傳入 URI,F(xiàn)ileSystem 會(huì)將 shceme+authority 作為 key 去查找緩存的文件系統(tǒng),如果不存在,根據(jù) scheme 查找到 FileSystemFactory 調(diào)用 create 創(chuàng)建文件系統(tǒng),返回之后就可以對(duì)文件進(jìn)行操作了。不過,在平臺(tái)實(shí)踐過程中,經(jīng)常會(huì)遇到這樣的問題:

    • 第一, 如何把 checkpoint 寫入公共 HDFS,把業(yè)務(wù)數(shù)據(jù)寫入另外的 HDFS?比如在平臺(tái)統(tǒng)一管理狀態(tài),用戶不關(guān)注狀態(tài)的存儲(chǔ),只關(guān)注自己業(yè)務(wù)數(shù)據(jù)讀寫 HDFS 這樣的場(chǎng)景,會(huì)有這樣的需求。怎么滿足這樣的一個(gè)業(yè)務(wù)場(chǎng)景呢?一個(gè)方案是可以把多個(gè) HDFS 集群的配置進(jìn)行融合,但是它會(huì)有個(gè)問題。就是如果多個(gè) HDFS 集群配置有沖突的話,合并會(huì)帶來一定的問題。另外,可以考慮一些聯(lián)邦的機(jī)制,比如 ViewFs,但這種機(jī)制可能又有點(diǎn)重。是否有其它更好的方案呢?
    • 第二, 如何將數(shù)據(jù)從一個(gè) OSS 存儲(chǔ)讀出、處理后寫到另外一個(gè) OSS 存儲(chǔ)?

      這兩個(gè)問題都涉及到如何讓 Flink 的同一個(gè)文件系統(tǒng)支持多套配置。我們的解決方案是通過使用不同的scheme指定和隔離不同的配置。以 HDFS 支持多配置為例,如下圖所示:

    • 第一步,在配置中設(shè)置自定義 scheme (aaHDFS) 的綁定的 scheme (HDFS) 及對(duì)應(yīng) HDFS 配置路徑。
    • 第二步,在調(diào)用 FileSystem.get 時(shí),從 aaHDFS 對(duì)應(yīng)的路徑加載 Hadoop 配置。
    • 第三步,在讀寫 HDFS 時(shí),使用 HadoopFileSystemWrapper 將用戶自定義 scheme 的路徑 (aaHDFS://) 轉(zhuǎn)換為真實(shí)的 hadoop 路徑 (HDFS://)。

      我們也做了許多其它的優(yōu)化和擴(kuò)展,主要分為三大塊。

    • 第一塊是性能的優(yōu)化,包括 HDFS 優(yōu)化 (合并小文件、降低 RPC 調(diào)用)、基于負(fù)載的動(dòng)態(tài) rebalance、Slot 分配策略擴(kuò)展 (順序、隨機(jī)、按槽分散) 等等。
    • 第二塊是穩(wěn)定性的優(yōu)化,包括 ZK 防抖、JM Failover 優(yōu)化、最后一次 checkpoint 作為 savepoint 等等。
    • 第三塊是易用性的優(yōu)化,包括日志增強(qiáng) (日志分離、日志級(jí)別動(dòng)態(tài)配置)、SQL 擴(kuò)展 (窗口支持增量計(jì)算,支持offset)、智能診斷等等。

      四、未來規(guī)劃

      最后是未來規(guī)劃。歸納為 4 點(diǎn):

    • 第一,持續(xù)完善 SQL 平臺(tái)。持續(xù)增強(qiáng)完善 SQL 平臺(tái),推動(dòng)用戶更多地使用 SQL 開發(fā)作業(yè)。
    • 第二,智能診斷和自動(dòng)調(diào)整。全自動(dòng)智能診斷,自適應(yīng)調(diào)整運(yùn)行參數(shù),作業(yè)自治。
    • 第三,批流一體。SQL 層面批流一體,兼具低延遲的流處理和高穩(wěn)定的批處理能力。
    • 第四,AI 探索實(shí)踐。批流統(tǒng)一和 AI 實(shí)時(shí)化,人工智能場(chǎng)景探索與實(shí)踐。

      原文鏈接:http://click.aliyun.com/m/1000293113/

      本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

    •  
      (文/媒體小英)
      免責(zé)聲明
      本文僅代表作發(fā)布者:媒體小英個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
       

      Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

      粵ICP備16078936號(hào)

      微信

      關(guān)注
      微信

      微信二維碼

      WAP二維碼

      客服

      聯(lián)系
      客服

      聯(lián)系客服:

      在線QQ: 303377504

      客服電話: 020-82301567

      E_mail郵箱: weilaitui@qq.com

      微信公眾號(hào): weishitui

      客服001 客服002 客服003

      工作時(shí)間:

      周一至周五: 09:00 - 18:00

      反饋

      用戶
      反饋

      午夜久久久久久网站,99久久www免费,欧美日本日韩aⅴ在线视频,东京干手机福利视频
        <strike id="ca4is"><em id="ca4is"></em></strike>
      • <sup id="ca4is"></sup>
        • <s id="ca4is"><em id="ca4is"></em></s>
          <option id="ca4is"><cite id="ca4is"></cite></option>
        • 主站蜘蛛池模板: 国产精品久久久| 日本一区二区三区久久| 国产精品正在播放| 亚洲日韩精品无码专区加勒比 | 三年片在线观看免费观看大全中国| 被夫上司连续侵犯七天终于| 日韩制服丝袜电影| 国产免费牲交视频| 久久―日本道色综合久久| 色妞视频一级毛片| 成人午夜性a级毛片免费| 处女的诱惑在线观看| 亚洲网红精品大秀在线观看| 99热在线获取最新地址| 欧美白人最猛性xxxxx| 国产精品白嫩在线观看| 亚洲av无码乱码在线观看| 国产浮力影院第一页| 日本另类z0zx| 午夜视频体验区| jizz18高清视频| 波多野结无码高清中文| 国产精品成人99一区无码| 亚欧免费无码aⅴ在线观看| 韩国电影吃奶喷奶水的电影| 护士们的放荡交换全文| 动漫人物桶动漫人物免费观看| www.色午夜| 欧美添下面视频免费观看| 国产福利电影在线观看| 久久婷婷五月综合97色一本一本| 色婷婷亚洲一区二区三区| 宅男66lu国产在线观看| 亚洲毛片一级带毛片基地| 44444色视频在线观看| 日本最新免费二区| 午夜影院app| 96xxxxx日本人| 最新中文字幕在线资源| 国产AV国片精品一区二区| jizzjizz18日本人|