本文介绍如何使用 Nexmark 基准测试工具评测实时计算 Flink 版的流处理性能。
性能一览
Nexmark 是业界通用的流处理引擎性能基准,包含 19 条标准 Query,覆盖过滤、聚合、JOIN、窗口等典型场景。本文基于 Nexmark 测试工具,在 8 CU 计算资源配置下,以 1 亿条输入数据为基准,对实时计算 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 测试工具基于实时计算 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 或更高版本。
已创建工作空间,详情请参见开通实时计算Flink版。
已获取阿里云账号的 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
如需查看工作空间的存储类型,在实时计算管理控制台单击目标工作空间操作列下的详情查看。
步骤三:配置运行参数
编辑 nexmark-flink/nexmark_env.sh 文件,填写以下参数。
参数名 | 说明 | 示例 |
END_POINT | 实时计算 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 ============================================================================
性能表现
实时计算 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 |