亚马逊AWS官方博客
AWS Graviton3 加速 Flink 作业执行:Benchmark
AWS 于 2022 年 5 月宣布推出 Graviton3,使用 ARM Neoverse 内核定制设计的 ARM 架构构建,针对提供高性能和能效进行了优化。与 Graviton2 相比,AWS Graviton3 的计算性能提高了 25%;并于 2023 年 11 月 16 日宣布在中国区域推出 C7g、M7g 和 R7g 实例。
客户在评估将他们的大数据工作负载转移到 AWS Graviton3 过程中,许多人询问,在典型的流式处理引擎 Flink 工作负载中是否可以实现比同等配置 x86 实例更具性能和性价比优势。
在这篇文章中,将比较 5 种相同配置的 EC2 实例在执行 Nexmark Benchmark 时的性能和成本。
性能对比:
- r6g.2xlarge 相比 r5.2xlarge ,完成时间节省 14%
- r7g.2xlarge 相比 r5.2xlarge ,完成时间节省 48%
- r7g.2xlarge 相比 r6i.2xlarge ,完成时间节省 28%
成本对比:
以上述 5 种实例在 us-east-2 区域的 1 年期无预付 RI 价格的有效小时费率为基础,计算执行 Nexmark Benchmark 所需的成本:
进一步,以 r5.2xlarge 的 Benchmark 成本为基准进行归一化处理,得到如下比较结果:
其中:
- r6g.2xlarge 相比 r5.2xlarge ,成本节省31%
- r7g.2xlarge 相比 r5.2xlarge ,成本节省 53%
- r7g.2xlarge 相比 r6i.2xlarge ,成本节省 38%
本文后续内容将详细描述如何搭建 Flink 集群并执行 Nexmark Benchmark 测试。
Benchmark 工具介绍
NEXMark 是一个开源的基准测试工具,主要用于测试和评估流处理引擎的性能,为流处理系统提供了公平和全面的性能基准测试,可以指导流系统的优化和性能比较。
Nexmark 主要特点:
– 实现了流处理的标准化基准测试,可以对比不同流处理系统的性能,例如 Flink、Spark Streaming 等。
– 模拟了 3 类常见的流处理场景:事件监控、查询分析和数据管道处理。
– 模型设计基于真实的公开数据集,更贴近实际情况。
– 编写了等价的 SQL 和 Java 代码,可以测试多种系统。
– 提供了详细的测试报告,评估延迟、吞吐量、查询表现等。
– 有单机和集群两种运行模式,可以测试不同规模。
– 可以扩展自定义的工作负载进行新场景测试。
– Nexmark 为 Apache 基金会下的开源项目,可以免费使用。
Nexmark 对在线拍卖系统上表示的三个实体模型的多个查询:
- Person:代表提交拍卖物品和/或在拍卖中出价的人。
- Auction:代表正在拍卖的物品。
- Bid:代表对拍卖中的物品的出价。
源事件总数为 1 亿,源每秒生成 10M 条记录,3 个流处理作业的比例是 Bid:92%,Auction:6%,Person:2%。
Nexmark 提供了编号从 q0~q22 的 23 个查询任务,其中 q1 ~ q8 来自原始 NEXMark 查询,q0 和 q9 ~ q13 来自 Apache Beam,其他作为扩展覆盖更多场景。
观测指标:
为了评估性能,Nexmark 使用了两个性能测量术语:核心(Cores)和时间(Time)。
- Cores 是流处理系统使用的 CPU 使用率。流处理系统如何有效利用 CPU 资源,每个核心贡献多少吞吐量,是流处理性能基准测试的重要方面。对于 Flink,Nexmark 在每个工作节点上部署一个 CPU 使用情况收集器,并将使用情况指标发送给基准运行程序进行汇总。
- Time 是流处理系统执行指定数量的事件的成本时间。通过 Cores * Time,我们可以知道流处理系统使用了多少资源来处理指定数量的事件。
您还可以通过 NEXMark research paper 和 Apache Beam Nexmark 了解更多详情。
Benchmark 组网
在本博客中采用如下规格的 EC2 实例搭建 Flink Standalone 集群,环境搭建过程以 r7g.2xlarge 规格为例进行。
- 节点数:3 * r7g.2xlarge
- 节点 1: 作为 Flink master/worker 角色的合设节点
- 节点 2/3:worker 角色的单独节点
- EBS 磁盘:40GB GP3(默认性能)
- 操作系统:Amazon Linux 2
- 软件:
- Flink 1.17.2
- Amazon Corretto 11
部署 Flink Standalone 集群
创建 EC2 实例
本次 Benchmark 中使用 3 节点的 Flink Standalone 集群,包含 1 个 master/worker 合设节点和 2 个独立 worker 节点。您可以参考教程:Amazon EC2 Linux 实例入门完成 3 台 EC2 实例的创建。
注意:请将 3 个节点方式在同一个 Subnet 子网中。
部署 Flink Standalone 集群环境
通过 SSH 登录到 3 台 EC2 实例,分别执行下面命令,安装必要的基础软件:
将 下列 3 个 IPADDR_ 变量设置为 3 台 EC2 实例的 VPC IP 地址,这里以 10.10.20.10~12 为例进行演示。在您环境中部署时,请根据实际情况进行替换。在所有 3 台 EC2 实例上继续执行下列命令:
在 Master 节点继续执行下面操作:完成 Flink 和 Nexmark 安装。
下载和解压缩 Flink 软件包:
配置 masters 和 workers 文件:
下载 Nexmark 源码并完成构建:
编辑 Nexmark 配置文件 nexmark-flink/conf/flink-conf.yaml:
编辑 Nexmark 配置文件 nexmark-flink/conf/nexmark.yaml:
将 master 节点已安装的软件包通过 scp 命令传输到 worker1/2 节点:
启动 Flink Standalone 集群
在 master 节点执行下面命令:
启动 Nexmark Benchmark程序
在 master 节点执行下面命令:
开始执行 Benchmark
在 master 节点执行下面命令,经启动 Benchmark 运行:
上面命令启动了一个单独的 screen 执行 benchmark 操作,以防止 SSH 会话超时退出导致 Benchmark 运行异常。该会话通过指定 -L 选项,将在当前目录生成session 日志文件 screenlog.0,您可以通过 more 或者 tail 等命令进行查看。
如需退出当前 session,请使用快捷键 Ctrl + A + D 退出。
如需重新进入 session,请使用 screen -R nexmark。
查看结果报告
当在日志文件 screenlog.0 看到下列形式的结果报告时,表示本次 Benchmark 执行完成,表格中列举了 Benchmark 过程中 q0~q22(除 q6)分析任务的完成时间 Times(s),以及最后一行所有分析任务的总完成时间,通常采用这一总完成时间来作为衡量 Benchmark 性能的指标。
查看 Benchmark 执行时的监控信息
在 Benchmark 执行时,你可以在所有 3 台 EC2 实例上,通过 htop 命令查看 CPU/内存利用率等信息。
在 Benchmark 结束后,可以在 EC2 控制台查看所有 3 台实例的 CPU 利用率和网络传入数据量等监控指标。