本文介紹如何使用 Nexmark 基準測試載入器評測Realtime Compute Flink 版的流處理效能。
效能一覽
Nexmark 是業界通用的流處理引擎效能基準,包含 19 條標準 Query,覆蓋過濾、彙總、JOIN、視窗等典型情境。本文基於 Nexmark 測試載入器,在 8 CU 計算資源配置下,以 1 億條輸入資料為基準,對Realtime Compute Flink 版進行全量 Query 效能評測。測試結果表明:
簡單查詢(如 q0、q1、q2)的 RPS 可達 400 萬~650 萬條/秒。
複雜彙總與視窗查詢(如 q4、q5、q16)的 RPS 在 15 萬~63 萬條/秒之間。
測試載入器
Nexmark 是一套針對流處理引擎的標準效能基準測試。測試模型如下:
Nexmark 源表:按照指定 TPS 產生測試資料(Person、Auction、Bid 三類事件)。
Transformations:19 條標準 Nexmark Query,覆蓋過濾、轉換、彙總、JOIN、視窗等典型情境。
Blackhole 結果表:資料寫入 Blackhole,排除外部儲存的效能幹擾,專註評測 Flink 引擎自身的處理能力。
本文採用的 Nexmark 測試載入器基於Realtime Compute Flink 版的 OpenAPI 實現,自動化完成作業建立、部署、運行監控及結果採集的全流程。無需在控制台手動編寫 SQL 或建立作業。
測試環境
本次測試的 Flink 作業啟用了以下最佳化配置:
配置項 | 參數值 | 說明 |
table.exec.mini-batch.enabled | true | 開啟 Mini-Batch 彙總 |
table.exec.mini-batch.allow-latency | 2s | Mini-Batch 攢批間隔 |
table.optimizer.distinct-agg.split.enabled | true | 開啟 Distinct 彙總拆分最佳化 |
execution.checkpointing.interval | 3min | Checkpoint 間隔 |
前提條件
已安裝 Java JDK 1.8.x 或更高版本。
已建立工作空間,詳情請參見開通Realtime ComputeFlink版。
已擷取阿里雲帳號的 AccessKey ID 和 AccessKey Secret。
測試步驟
步驟一:下載測試載入器
下載 Nexmark 測試載入器壓縮包nexmark-flink.tar.gz並解壓。
解壓後的目錄結構如下:
nexmark-flink/
├── run_nexmark.sh # 測試入口指令碼
├── nexmark_env.sh # 環境變數設定檔(需編輯)
├── bin/ # 運行指令碼
├── conf/ # Flink 作業配置
├── lib/ # JAR 包(需上傳至控制台)
└── queries-vvp/ # Nexmark Query SQL 檔案步驟二:上傳 Nexmark JAR
單擊進入目標專案空間,在左側導覽列。
選擇並上傳
nexmark-flink-0.2-SNAPSHOT.jar檔案。該檔案位於測試載入器的nexmark-flink/lib目錄下。上傳完成後,單擊目標檔案名稱複製 OSS 地址。該地址在後續配置參數時使用。檔案路徑格式因儲存類型而異:
OSS Bucket 儲存:
oss://<OSS Bucket 名稱>/artifacts/namespaces/<專案空間名稱>/<檔案名稱>例:
oss://oss-test/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar全託管儲存:
oss://flink-fullymanaged-<工作空間ID>/artifacts/namespaces/<專案空間名稱>/<檔案名稱>例:oss://flink-fullymanaged-e6a123456789/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar
如需查看工作空間的儲存類型,在Realtime Compute管理主控台單擊目標工作空間操作列下的詳情查看。
步驟三:配置運行參數
編輯 nexmark-flink/nexmark_env.sh 檔案,填寫以下參數。
參數名 | 說明 | 樣本 |
END_POINT | Realtime Compute Flink 版的服務存取點。根據地區選擇對應的存取點,詳情請參見服務存取點。 | ververica.cn-hangzhou.aliyuncs.com |
AK | 阿里雲帳號的 AccessKey ID。 | - |
SK | 阿里雲帳號的 AccessKey Secret。 | - |
WORK_SPACE | 專案工作空間的 Workspace ID。 | e6a123456789 |
NAMESPACE | 專案工作空間的 Namespace。 | flink-default |
NEXMARK_JAR | 步驟二中上傳的 JAR 檔案的 OSS 地址。 | oss://flink-fullymanaged-e6a123456789/artifacts/namespaces/flink-default/nexmark-flink-0.2-SNAPSHOT.jar |
FLINK_VERSION | 目標測試的 Flink 引擎版本號碼。 | vvr-11.6-jdk11-flink-1.20 |
QUERIES | 指定啟動並執行 Query。多個 Query 以逗號分隔,例如 | all |
運行全部 Query 耗時較長。每條 Query 需要經歷作業建立、資料產生、計算執行等階段。建議先運行單條 Query(例如將 QUERIES 設為 q0),驗證環境配置和參數填寫無誤後,再執行全量測試。
步驟四:運行測試
在
nexmark-flink目錄下執行以下命令。./run_nexmark.sh測試載入器通過 OpenAPI 自動建立並運行 Nexmark 作業。
運行完成後,輸出各 Query 的運行時間長度(毫秒)。樣本如下:
INFO com.github.nexmark.flink.vvp.Nexmark - q0 13078 ============================================================================ ✓ Benchmark execution completed successfully ============================================================================
效能表現
Realtime Compute Flink 版 8 CU 計算資源配置下,Nexmark 19 個 Query 的效能表現如下。每條 Query 的輸入資料量為 1 億條,RPS 為輸入資料量與用時的比值。
以下測試資料基於特定硬體環境和引擎版本採集。隨著底層硬體升級迭代和引擎版本更新,實際效能表現可能存在差異,測試結果僅供參考。
Query | 用時(毫秒) | RPS |
q0 | 23450 | 4,264,392 |
q1 | 22824 | 4,381,353 |
q2 | 15224 | 6,568,576 |
q3 | 21558 | 4,638,649 |
q4 | 157117 | 636,468 |
q5 | 679277 | 147,215 |
q7 | 333837 | 299,547 |
q8 | 29939 | 3,340,125 |
q9 | 266563 | 375,146 |
q10 | 51202 | 1,953,049 |
q11 | 145983 | 685,011 |
q12 | 36991 | 2,703,360 |
q14 | 20012 | 4,997,002 |
q15 | 42734 | 2,340,057 |
q16 | 337293 | 296,478 |
q17 | 27076 | 3,693,308 |
q18 | 96335 | 1,038,044 |
q19 | 95121 | 1,051,293 |
q20 | 231482 | 431,999 |
q21 | 39693 | 2,519,336 |
q22 | 31228 | 3,202,254 |