0 序
1 Flink 基礎概念
基礎概念類
作業(Job)
類似於MaxCompute或Hadoop Job,一個實時計算的作業描述了一個完整的流式數據處理業務邏輯,是流式計算的基礎業務單元。
JobManager
TaskManager
Flink API
Flink SQL
- 不同於諸多開源的提供非常底層的、編程API的流式數據處理系統,實時計算 Flink提供更加高層、更加面向業務化的Flink SQL(標準SQL語法上提供了關於流式處理的語法擴展)。
- Flink SQL能夠方便數據開發人員使用標準化的SQL,完成流式數據計算加工的業務流程。
- 因此,實時計算 Flink適合更大衆的數據分析人員快速、方便地完成一個流式數據處理業務。
UDF (User Define Function)
- 實時計算 Flink支持UDF函數。類似於Hive UDF函數,Flink SQL提供了標準化的流式數據處理能力同時,對於部分業務特殊自定義處理邏輯,建議您使用UDF函數表達。
- 目前實時計算 Flink僅支持Java的UDF函數擴展。
資源 (Resource)
當前UDF函數僅支持使用Java語言表達,對於您上傳的每個JAR,實時計算定義爲一個Resource。
數據採集 (Data Collection)
- 廣義的數據採集指,將數據從數據產生方收集並傳輸進入到大數據處理引擎的過程。
- 在實時計算 Flink,數據採集原則上遵循上述定義,但更加聚焦爲將流式數據從數據產生方收集並傳輸進入數據總線的過程。
數據存儲 (Data Storage)
- 實時計算 Flink定義爲一種輕量級計算引擎,本身不帶有任何業務數據存儲系統。
- 實時計算 Flink均是使用外部數據存儲作爲數據來源和數據目的端進行使用。
- 實時計算將數據存儲均定義爲外部的數據存儲。
例如,將您RDS作爲結果表,那麼RDS即是實時計算的一類DataStore。
- 支持流式輸入表類型包括
- 大數據總線(DataHub)
- 日誌服務(LogService)
- 消息服務(MQ)
- 支持靜態輸入表類型包括
- 表格存儲(TableStore)
- 雲數據庫(RDS)
- 支持輸出表類型包括
- 大數據總線(DataHub)
- 日誌服務(LogService)
- 表格存儲(TableStore)
- 雲數據庫(RDS)
- 消息服務(MQ)
數據加工 (Data Development)
- 流式計算的開發過程(編寫Flink SQL Job、Flink API Job的過程)定義爲數據加工。
- 實時計算 Flink可提供一整套包括開發、調試的在線IDE,服務流式數據加工過程。
數據運維 (Data Operation)
- 實時計算作業的在線運維定義爲數據運維。
- 實時計算 Flink可提供一整套管控平臺,方便您進行流式數據的運維管控。
資源估算類
Compute Unit/CU/實時計算單元 := 1 CPU / 4GB
- Flink工作空間的基本計量單位爲Compute Unit(CU)
- 即: 計算資源,1 CU=1核CPU+4 GiB內存+20
- 華爲雲(DLI)、阿里雲(實時計算Flink版),對1CU的定義,均是 1Cpu 、4GB
- 在實時計算 Flink中,作業的實時計算單元爲CU。一個CU描述了一個實時計算作業最小運行能力,即在限定的CPU、內存、I/O情況下對於事件流處理的能力。一個實時計算作業可以指定在一個或者多個CU上運行。
當前實時計算定義,1CU的處理能力大概爲 1000條數據 / 秒。 (阿里雲)
- GB本地存儲(放置日誌、系統檢查點等信息),CU對應實時計算底層系統的CPU計算能力。
1個實時計算作業(Job)的CU使用量取決於此Job輸入數據流的QPS、計算複雜程度,以及具體的輸入數據分佈情況。
您可以根據業務規模以及實時計算的計算能力,估算所需購買的資源數量。
實時計算1 CU的處理能力如下表所示。
處理場景 | 處理能力 |
---|---|
簡單的流式壓測處理 例如,過濾、清洗等操作。 |
1 CU每秒可以處理40000~55000條數據。 |
複雜的流式壓測處理 例如,聚合操作、複雜UDF計算等。 |
1 CU每秒可以處理5000~10000條數據。 |
- 計算能力的特別說明
- 上述計算能力估值僅限於實時計算內部處理能力,不包括對外數據讀取和寫入部分。
- 外部數據的讀寫效率會影響您對實時計算能力的評估。
例如:如果實時計算需要從日誌服務(LogService)讀取數據,但LogService對於請求調用配額(Quota)存在一定限制,則:實時計算整體的計算能力將被限制在LogService允許的範圍內。
- 如果實時計算引用的RDS數據存儲存在連接數或者TPS限制,則:實時計算Job的吞吐能力將受限於RDS本身的流控限制。
- 如果作業中使用窗口函數,CU的使用量會比簡單作業高,建議至少購買 4 CU。
Slot/任務槽
taskslot
是靜態概念 , 是指 單 TaskManager 具有的併發執行能力- 可以通過參數
taskmanager.numberOfTaskSlots
進行配置
並行度/parallelism
-
並行度是動態概念,也就是 TaskManager 運行程序時實際使用的併發能力,可以通過參數 parallelism.default 進行配置
-
如果並行度 <= 集羣中可用 slot 的總數,則:Flink Job 可正常執行
因爲 slot 不一定要全部佔用,有十分力氣可以只用八分;
- 而如果並行度 > 可用 集羣中 slot 的總數,則: 導致超出了並行能力上限————心有餘力不足,Flink Job 就只好等待資源管理器分配更多的資源了。
最佳實踐:華爲雲 DLI Flink Job 資源估算的核心概念
- 【單TM所佔CU數】假定值
n
= 1
華爲雲DLI給Flink Job實際分配CPU時,會虛擬CPU給 Flink Job 的 Task Manager。
這個虛擬的比例是2n + 1
真實的資源根據DLI Job配置界面中配置的【單TM Slot數】的資源來計算
假定【單TM所佔CU數】爲1,則:Flink Web UI中 Task Manager 的 CPU 數會顯示爲 3
- 【CU數量】 = 作業佔用資源總CU數,需配置與實際佔用資源一致,作業實際佔用資源根據算子並行數按需申請。
CU數量 = 管理單元 + (算子總並行數 / 單TM Slot數) * 單TM所佔CU數
即: TaskManager 數量 = 算子總並行數 / 單TM Slot數TaskManager 數量,是按需的、動態變化的
-
【實際CU數量】= 彈性資源池當前分配的CU
-
【管理單元】 = Job Manager
-
【並行數】
算子默認最大並行數,優先級比代碼中低。
並行數爲作業每個算子的並行數,適度增加並行數會提高作業整體算力,但也須考慮線程增多帶來的切換開銷,其上限是計算單元CU數的4倍;
最佳實踐爲計算單元CU數的1-2倍。
注意:該並行數設置優先級低於代碼中並行數設置。
==============
Slot(任務槽)是Flink中用於執行任務的資源單位,每個TaskManager可以提供多個Slot,每個Slot可以運行一個並行任務。
並行度(parallelism)是指作業執行的並行程度,即:作業中所有並行子任務的總數。
Slot和並行度的關係:
需 TaskManager 的Slot數 * TaskManager 的數量 >= 作業的並行度;否則,作業無法充分利用所有資源。
若 作業的並行度 > 集羣中所有TaskManager提供的Slot總數,則:作業將無法啓動更多的並行任務,即使資源足夠。
X 參考文獻
關於 CU 的說明
關於 CU 的說明