Flink 大規(guī)模作業(yè)調度性能優(yōu)化
隨著 Flink 流批一體架構不斷演進和升級,越來越多的用戶開始選擇用 Flink 來同時承載實時和離線的業(yè)務。離線業(yè)務和實時業(yè)務有一定差異性,其中比較關鍵的一點是 ——?離線作業(yè)的規(guī)模通常都遠遠大于實時作業(yè)。超大規(guī)模的流批作業(yè)對 Flink 的調度性能提出了新的挑戰(zhàn)。在基于 Flink 1.12 版本部署大規(guī)模流批作業(yè)時,用戶可能會遇到以下瓶頸:
需要很長時間才能完成作業(yè)的調度和部署; 需要大量內存來存儲作業(yè)的執(zhí)行拓撲圖以及部署時所需的臨時變量,并且在運行過程中會出現頻繁的長時間 GC,影響集群穩(wěn)定性;
為了優(yōu)化 Flink 調度大規(guī)模作業(yè)的性能,我們在 Flink 1.13 版本和 1.14 版本進行了以下優(yōu)化:
針對拓撲結構引入分組概念,優(yōu)化與拓撲相關的計算邏輯,主要包括作業(yè)初始化、Task 調度以及故障恢復時計算需要重啟的 Task 節(jié)點等等。與此同時,該優(yōu)化降低了執(zhí)行拓撲占用的內存空間; 引入緩存機制優(yōu)化任務部署,優(yōu)化后部署速度更快且所需內存更少; 基于邏輯拓撲和執(zhí)行拓撲的特性進行優(yōu)化以加快 Pipelined Region 的構建速度,從而降低作業(yè)初始化所需的時間。
一、性能評測結果
1.12 | 1.14 | 時間降低百分比(%) | |
作業(yè)初始化 | 11,431ms | 627ms | 94.51% |
任務部署 | 63,118ms | 17,183ms | 72.78% |
故障恢復時計算重啟節(jié)點 | 37,195ms | 170ms | 99.55% |
二、基于拓撲結構的優(yōu)化

圖 1 目前 Flink 的兩種分發(fā)模式

三、優(yōu)化任務部署
目前任務部署包含以下幾個階段:
JobManager 在主線程內為每一個 Task 創(chuàng)建任務部署描述符 (TaskDeploymentDescriptor,以下簡稱 TDD); JobManager 在異步線程內將這些 TDD 進行序列化; JobManager 通過 RPC 通信將序列化后的 TDD 發(fā)送至 TaskManager; TaskManager 基于 TDD 創(chuàng)建任務并執(zhí)行。
3.1 為 ShuffleDescriptor 添加緩存機制
3.2 通過 Blob 服務器分發(fā) ShuffleDescriptor

四、針對 Pipelined Region 構建的優(yōu)化



評論
圖片
表情
