柚子快報激活碼778899分享:得物Flink內(nèi)核探索實踐
柚子快報激活碼778899分享:得物Flink內(nèi)核探索實踐
一、前言
隨著大數(shù)據(jù)技術(shù)的飛速發(fā)展,實時處理能力變得越來越重要。在眾多實時處理框架中,Apache Flink以其強大的流處理能力和豐富的功能集,受到了廣泛關(guān)注和應用。在實時業(yè)務日益增長的趨勢下,這促使我們深入探索Flink的內(nèi)核,以更好地保障Flink任務的維護。本次分享將重點介紹得物在Flink內(nèi)核方面的探索與實踐,探討如何通過深度優(yōu)化和定制,實現(xiàn)更加高效和穩(wěn)定的數(shù)據(jù)處理能力。
二、讀者收益
通過閱讀本次分享,讀者將獲得以下收益:
深入理解Flink內(nèi)核:了解Flink的核心架構(gòu)和關(guān)鍵組件,掌握Flink內(nèi)核的運行機制。 優(yōu)化實踐:學習得物在Flink優(yōu)化方面的實戰(zhàn)經(jīng)驗,包括如何通過參數(shù)調(diào)優(yōu)和內(nèi)核定制,提升系統(tǒng)性能。 問題解決方案:掌握處理Flink常見問題的方法和技巧,提高在實際項目中應對復雜場景的能力。 實時處理案例:通過實際案例,了解如何在復雜業(yè)務場景中應用Flink,實現(xiàn)高效的實時數(shù)據(jù)處理。 最佳實踐:獲得得物在Flink應用中的最佳實踐建議,幫助在實際項目中少走彎路,提高開發(fā)效率。
無論你是剛接觸Flink的初學者,還是有一定經(jīng)驗的開發(fā)者,相信通過本次分享,都能有所收獲,進一步提升在實時數(shù)據(jù)處理方面的能力。
三、自研特性
自研調(diào)度器
Apache Flink是一個開源的流處理框架,調(diào)度器是其重要的一部分。
在調(diào)度器上,我們新增了一款集合社區(qū)各款調(diào)度器優(yōu)點的DwScheduler。
SchedulerNG (interface)
|
+-- SchedulerBase (implements SchedulerNG)
|
+-- DefaultScheduler (extends SchedulerBase 默認資源調(diào)度器)
|
+-- AdaptiveBatchScheduler (extends DefaultScheduler 自適應批調(diào)度器)
|
+-- SpeculativeScheduler (extends AdaptiveBatchScheduler 預測執(zhí)行調(diào)度器)
|
|
+-- DwScheduler (extends DefaultScheduler 自研調(diào)度器)
|
+-- AdaptiveScheduler (implements SchedulerNG 自適應調(diào)度器)
在流任務生產(chǎn)環(huán)境中目前現(xiàn)有的調(diào)度并不很理想,在生產(chǎn)中我們常常遇到一些問題,例如:
任務JobGraph與資源調(diào)度沒有直接的聯(lián)系,難于變化和修改; 不能以TaskManager維度均衡分配所有task到所有slot上; 1.18以前沒有直接動態(tài)擴縮容的接口、1.18以后也沒有整體算子同時擴縮容的能力; 流任務調(diào)度器沒有可以遷移task/Tm的遷移計算節(jié)點的能力。 DwScheduler整合了社區(qū)調(diào)度器的各項優(yōu)點,并提供了很多適應我們生產(chǎn)情況的特性:
建立了JobGraph與資源之間的直接聯(lián)系,用JSON可修改和表示流圖信息和資源并進行調(diào)度; 能夠均衡調(diào)度所有task到所有TaskManager上; 支持動態(tài)擴縮容各個算子,并且熱更新資源規(guī)格的能力; 支持熱遷移task/Tm的能力。
下面主要從上述的這四個特性上來重點講解我們的成果。
簡化資源調(diào)度
背景:常規(guī)通過配置任務的高級參數(shù)進行提交任務,不利于資源的拓展,以及用戶想設(shè)置多個SlotSharingGroup也無法通用地實現(xiàn)。
SQL/DataStream任務都可通過我們的Flink編譯器Generator編譯完成后生成一個流圖資源信息JSON。
調(diào)度器支持通過JobResourceProfile JSON信息來進行資源申請。
JobResourceProfile的信息用戶可自由編輯,同樣我們也提供了便捷的UI給用戶操作算子和流圖的以及資源的配置。 我們支持配置算子的并行度、最大并行度、SlotSharingGroup,以及資源的CPU、MEM、堆外內(nèi)存部分我們也做了合理的管理讓用戶只需要配置一個比例,自動化設(shè)置資源的堆外各項參數(shù)降低OOM的風險,簡化了用戶對資源配置的操作難度。 支持接收新的資源資源JobResourceProfile JSON重新調(diào)度任務,支持同時擴縮容多個Operator算子的并行度。
在JobManager里我們提供了接收資源變更的Handler; DwScheduler可以接收多元化的Service發(fā)起過來的資源變更請求; 并且它提供了六個回調(diào)接口,不同的Service可以通過實現(xiàn)它來執(zhí)行不同的邏輯。
default void preRequestResource() {}
default void postRequestResource(Throwable throwable) {}
default void preRestart() {}
default void postRestart() {}
default void preDeploy() {}
default void postDeploy(Throwable throwable) {}
Flink支持通過資源JobResourceProfile+JobGraph流圖提交任務,JM支持動態(tài)接收新的JobResourceProfile更新任務資源,可以按標簽申請不同的資源機型。
均衡調(diào)度Task
背景:Flink的task分配是基于slot維度進行全局調(diào)度的,即使配置了cluster.evenly-spread-out-slots 也同樣會有在Tm維度上的task分配不均衡的問題。
使用自研調(diào)度器的情況下,能夠使用JobResourceProfile提前計算出每個TaskManager應該分配多少task,在此基礎(chǔ)上我們實現(xiàn)了自己的DwSlotSharingStrategy,可以有效的按TaskManager來分配task個數(shù),而不僅僅是在slot層面做到資源的均衡。
在同一個任務使用原生社區(qū)調(diào)度器和使用我們自研調(diào)度器,我們得出了一些數(shù)據(jù)效果,從Tm維度來看CPU使用均衡了許多。
從CPU使用率上來看,明顯均衡了很多,減少了不均衡分配帶來的性能瓶頸問題。
TaskManager熱遷移
背景:在日常生產(chǎn)運維中,經(jīng)常有需要遷移熱點機器或故障機器的底層場景,F(xiàn)link缺乏這部分的熱遷移能力。
自研Scheduler為我們解決了這一問題,我們支持了熱遷移TaskManager
同樣使用DwScheduler提供的六個回調(diào)接口以及觸發(fā)資源變更的請求來完成Tm的熱遷移 熱遷移的Service只需要對應地實現(xiàn)下它的功能,不必關(guān)心調(diào)度的流程
從投入生產(chǎn)遷移Tm資源的斷流耗時情況來看,幾乎能做到斷流1~5s內(nèi)的快速遷移:
TmRestart重啟策略
背景:Flink社區(qū)只提供了FullRestart、RegionRestart,往往在生產(chǎn)環(huán)境中我們經(jīng)常會遇到各種不可抗力Cancel用戶的代碼會超時或堆外有泄漏的情況。
為解決這一問題,我們在Restart層面增加了一種TmRestart策略:
我們將Tm Pod的主進程修改為常駐Shell,可以在Cancel超過一定時間能快速退出進程進行重啟,也可以根據(jù)JM請求的重啟參數(shù)直接觸發(fā)TmRestart; 修改Pod的主進程我們需要解決一些問題如:信號量傳遞給子進程、進程返回碼的協(xié)調(diào)與重新拉起; 另外我們也通過Shell主進程對Tm進程的IO探活、Process D監(jiān)控等等; 在重啟過程中會對zk有一定的重連,我們改造了這部分代碼,嘗試無法鏈接上一次的JM地址失敗后才會去訪問zk獲取最新的leader地址。 同時我們也可以調(diào)整重新拉起的Tm進程的JVM參數(shù)
在特殊場景通過對Tm退出的異常原因進行分析,列如k8s判定是OOM或是容器等待內(nèi)存回收的延時分布次數(shù)過高,判斷重新拉起的Tm是否應該進行JVM參數(shù)適當調(diào)整。
TmRestart重啟,可根據(jù)任務異常情況、作業(yè)配置等按需重啟Tm進程,支持修改JVM的參數(shù)。
四、總結(jié)
本文主要介紹了以下內(nèi)容:
Flink調(diào)度器的基本生產(chǎn)優(yōu)化和改造。 重建Flink資源模型和支持熱遷移等功能的特性介紹。 Flink的Task分配策略優(yōu)化和重啟邏輯新特性TmRestart。
*文 / 天然卷
本文屬得物技術(shù)原創(chuàng),更多精彩文章請看:得物技術(shù)
未經(jīng)得物技術(shù)許可嚴禁轉(zhuǎn)載,否則依法追究法律責任!
柚子快報激活碼778899分享:得物Flink內(nèi)核探索實踐
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。