免费人成动漫在线播放r18-免费人成观看在线网-免费人成黄页在线观看日本-免费人成激情视频在线观看冫-jlzzjlzz亚洲大全-jlzzjlzz亚洲日本

二維碼
企資網(wǎng)

掃一掃關(guān)注

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

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

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

本文整理自京東高級技術(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)

本文整理自京東高級技術(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 打造了第一代流式處理平臺,可以較好的滿足業(yè)務(wù)對于數(shù)據(jù)處理實(shí)時性的要求。不過它有一些局限性,對于那些數(shù)據(jù)量特別大,但是對延遲卻不那么敏感的業(yè)務(wù)場景,顯得有些力不從心。于是我們在 2017 年引入了 Spark streaming,利用它的微批處理來應(yīng)對這種業(yè)務(wù)場景。

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

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

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

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

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

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

    二、容器化實(shí)踐

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

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

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

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

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

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

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

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

    其中,整個集群的高可用是基于 ZK 實(shí)現(xiàn);狀態(tài)存儲主要是存在 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)行采集、存儲和查詢。

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

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

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

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

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

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

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

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

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

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

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

  • 第一,任務(wù)調(diào)優(yōu)繁瑣。在平臺提交任務(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ù)到平臺之后,我們會把拓?fù)浣o預(yù)覽出來,允許它靈活的配置這些算子的并行度。
  • 第二,槽位分組預(yù)覽。我們會清晰的顯示出任務(wù)的槽位分組情況和需要多少個槽。
  • 第三,網(wǎng)絡(luò) Buffer 預(yù)估。這樣可以最大限度的方便用戶在平臺進(jìn)行業(yè)務(wù)的調(diào)整和調(diào)優(yōu)。

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

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

    2、背壓量化

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

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

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

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

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

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

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

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

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

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

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

    四、未來規(guī)劃

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

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

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

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

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

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

    粵ICP備16078936號

    微信

    關(guān)注
    微信

    微信二維碼

    WAP二維碼

    客服

    聯(lián)系
    客服

    聯(lián)系客服:

    在線QQ: 303377504

    客服電話: 020-82301567

    E_mail郵箱: weilaitui@qq.com

    微信公眾號: weishitui

    客服001 客服002 客服003

    工作時間:

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

    反饋

    用戶
    反饋

    主站蜘蛛池模板: 国产 字幕 制服 中文 在线 | 亚洲成人动漫在线观看 | 狠狠色噜噜狠狠狠狠五月婷 | 天天爽视频 | 亚洲另类第一页 | 人人看人人看人做人人模 | 一二三四社区在线视频社区 | 影音先锋日韩 | 欧美视频一二三区 | 日韩精品福利片午夜免费 | 国产欧美成人 | 日韩亚洲人成在线综合日本 | 亚洲丝袜中文字幕 | 福利视频欧美一区二区三区 | 九九热线有精品视频99 | 精品五夜婷香蕉国产线看观看 | 91桃色国产线观看免费 | h国产在线观看 | 亚洲美女综合网 | 亚洲系列 | 欧美视频一区二区 | 夜夜操天天爽 | 久久精品国产精品亚洲婷婷 | 久久毛片免费看一区二区三区 | 午夜h | 成人怡红院视频在线观看 | 青春草视频 | 日韩在线不卡一区在线观看 | 亚洲精国产一区二区三区 | 婷婷激情五月网 | 一级一级一级毛片 | 成人在线播放网站 | 添望write.as女装 | 青青草国产成人久久91网 | 国产成人v片视频在线观看 国产成人v视频在线观看 | 国产在线观看99 | 特黄特色一级aa毛片免费观看 | 99热自拍| 欧美在线综合 | 一个人看的www视频免费观看 | 亚洲国产精品第一区二区三区 |