性能白皮书(Nexmark性能测试)

更新时间:
复制为 MD 格式

本文介绍如何使用 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

  1. 登录实时计算控制台

  2. 单击进入目标项目空间,在左侧导航栏文件管理 > 上传资源

  3. 选择并上传 nexmark-flink-0.2-SNAPSHOT.jar 文件。该文件位于测试工具的 nexmark-flink/lib 目录下。

  4. 上传完成后,单击目标文件名称复制 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 以逗号分隔,例如 q0q1,q2,q3。运行全部 Query 设置为 all

all

说明

运行全部 Query 耗时较长。每条 Query 需要经历作业创建、数据生成、计算执行等阶段。建议先运行单条 Query(例如将 QUERIES 设为 q0),验证环境配置和参数填写无误后,再执行全量测试。

步骤四:运行测试

  1. nexmark-flink 目录下执行以下命令。

    ./run_nexmark.sh
  2. 测试工具通过 OpenAPI 自动创建并运行 Nexmark 作业。

  3. 运行完成后,输出各 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