亚马逊AWS官方博客

利用 StarRocks on AWS 实现高性能实时数据分析

介绍

数据分析已成为行业数据平台的核心需求。近年来,随着数据基础设施领域的技术飞速发展,用户对实时分析的需求不断增加,用户正在寻找能够实时进行刷新的仪表板系统、监控系统,即实时的 OLAP 解决方案。更多应用程序以秒为单位,同时将数据大小扩展到 PB 甚至更高来进行数据分析。

StarRocks 是专为跨行业数据分析场景而设计的下一代亚秒级 MPP 数据库,旨在提供任意数据规模的简单快速的数据分析。结合易于使用的数据加载管道和对数据源的丰富支持,StarRocks on AWS 可以帮助用户实现他们的目标。StarRocks Flink CDC 连接器的推出是为了简化实时数据加载管道,成为 StarRocks 数据加载领域的新成员。

在这篇博客中,我们关注两件事:

  1. StarRocks on AWS 如何在不牺牲查询性能的情况下实现数据实时更新。
  2. StarRocks on AWS 的查询性能。

通过 Amazon Cloudformation 在亚马逊云科技平台上部署 StarRocks

图 1. StarRocks 基于亚马逊云科技的架构图

您现在已经可以通过 Amazon CloudFormation 在亚马逊云科技平台上轻松地部署 StarRocks 集群。通过利用亚马逊云科技全球基础设施,任何地方的任何人都可以通过几次点击在几分钟内启动 StarRocks 集群。

StarRocks 系统架构图

图 2. StarRocks 系统架构图

StarRocks 的设计架构很简单:StarRocks 集群由前端(FE)和后端(BE)组成,可以通过 MySQL 客户端访问。

  • FE 节点负责元数据管理、客户端连接器管理、查询规划、查询调度等。
  • BE 节点负责数据存储、计算执行、压缩、复制管理等。

凭借这种简单的架构,同时没有任何第三方依赖,StarRocks 非常易于维护。

StarRocks on AWS 的实时数据更新解决方案

没有新数据就无法进行实时分析。然而,OLAP 数据库的实时数据更新并不像看起来那么容易。 StarRocks 引入了主键数据模型,以允许实时数据更新,同时对查询性能的影响最小。

StarRocks 主键模型 – 实现数据实时更新

数据实时更新:对于列式存储并非易事

为了加速大规模数据的复杂查询,现代 OLAP 数据库通常使用列式存储,以获得减少查询磁盘 I/O 和更多数据压缩等优点。使用列式存储,数据存储在按列分组的数据块中。从本质上讲,列式存储并不适合实时更新。由于仅物理访问几行会导致过量的 IO 访问,从而导致显着的性能开销。数据更新成为 OLAP 数据库领域的一项具有挑战性的任务。

StarRocks 主键模型:更新数据且不影响查询性能

StarRocks 1.19 版本引入主键模型,以提高数据更新性能。它旨在支持实时更新,同时将对查询性能的负面影响降至最低。主键模型要求表具有唯一的主键(传统 OLTP 数据库中的 Primary Key),并且支持通过主键对表中的行进行更新和删除操作。

主键模型:工作原理

主键模型确保每个主键仅存在一个记录(版本),从而完全避免查询时的合并操作:

  • 当 StarRocks 收到记录的删除操作时,它会通过主键索引找到现有记录的位置,并在位图中将其标记为已删除。
  • 查询时,扫描仪单独读取并过滤每个段,过滤位图中标记的行。

由于一个主键下只有单一版本的数据,在没有合并操作的情况下,查询时不影响谓词下推和索引的使用,保证了查询的高效执行。

查询性能:并发更新表与静态表

TPC-H 是决策支持基准。它涵盖面向业务的 ad-hoc 查询和并发数据修改。TPC-H 测试基准中的数据和对应的查询可以涵盖多个行业特征,具有普适性。TPC-H 架构总共包含 8 个表,数据大小可配置为 1GB 到 3TB。基准测试共包含 22 个查询,主要评价指标是每个查询的响应时间,反映系统处理查询的能力。

当使用主键模型进行查询时,与静态表相比,查询更新表的唯一额外开销是访问位图和过滤已删除的行。以下测试旨在查明更新任务对查询性能的影响到底有多大。

在这个具体实验中,我们针对 TPC-H 1 TB 数据集对 22 个查询进行了性能测试。实验包括以下 3 种被查询表的更新场景:

  • 无数据更新
  • 两个并发更新任务
  • 十个并发更新任务
无数据更新 2 个并发更新任务 10 个并发更新任务
时间开销 170.666 sec 186.423 sec 183.729 sec

表 1. 基于主键模型在有数据更新和无数据更新下的性能表现

本次测试基于以上三个场景分别运行 3 次测试,基于三次测试的查询结果求和作为最后的查询响应时间,并把结果记录在表 1 中。根据测试结果,我们可以得出以下结论:

  • 数据更新对查询性能的负面影响极小。
  • 较高数量的并发更新不会对查询性能产生负面影响。

通过 StarRocks on AWS 从任意数据来源加载数据

实时数据同步pipeline

过去,要构建数据同步管道,如图 3 所示,必须有数据收集工具,例如 Debezium。收集到的数据流入消息队列,例如 Kafka,然后 Apache Flink 消费来自 Kafka 的数据写入下游目的地,下游目的地可以是各种数据库、数据湖和数据仓库。

这种 pipeline 带来了巨大的协作开销,因为在实际生产系统中,上游数据源、消息队列、Flink 和下游数据仓库通常由单独的团队维护。借助亚马逊云科技平台上的  StarRocks,加载实时数据变得更加简单。图 3 显示了当前 StarRocks 数据加载情况。

图 3. StarRocks 数据加载

丰富的数据源支持

实时加载数据

您可以通过多种方式将数据实时加载到 StarRocks 中(图 3 中的红色矩形框)。

  • 如果您喜欢直接将数据加载到 StarRocks 中而不进行预处理,您可以选择 Kafka 来执行 routine load
  • 如果您想通过预处理加载数据,例如创建宽表(join),您可以使用 Flink CDC 将数据加载到 Flink 中,使用 FlinkSQL 进行预处理,然后将数据加载到 StarRocks。以下是一个使用 Flink CDC 的例子。

什么是 Flink CDC

StarRocks 发布了 StarRocks Flink connector,作为一个 pipeline,让您可以轻松地将数据实时加载到 StarRocks 中。

图 4. 没有 Flink-CDC 的 pipeline

Apache Flink 的 CDC 连接器是 Apache Flink 的一组源连接器,用于使用 CDC 从不同数据库获取变更数据。为了消除对图 4 中的数据收集工具和消息队列的需求,它使用了 Flink CDC 作业来简化数据管道。

如图 5 所示,Flink CDC 作业的工作原理如下:

  • Flink CDC 从 MySQL 拉取增量数据
  • 创建 MySQL CDC 表,并使用 FlinkSQL 来执行数据预处理任务
  • 将预处理后的数据发送到下游的 StarRocks

图 5. 使用 Flink-CDC 的 pipeline

基于 StarRocks on AWS 的查询性能

当谈到在亚马逊云科技平台上使用 StarRocks 进行查询时,我们想讨论两件事。

  1. StarRocks 利用其完全定制的 CBO(cost-based optimizer)拥有出色的查询性能,我们可能会在以后的博客中详细讨论。同时,StarRocks 支持复杂查询,特别是多表(join)查询,以确保星型或雪花型数据仓库查询成为可能。
  1. 您可以通过 StarRocks 直接查询本地存储中的数据,也可以将其用作计算引擎来查询数据湖中存储的数据。在图 6 中,我们演示了如何使用亚马逊云科技平台上的 StarRocks 分析数据湖中存储的数据,而无需将数据导入 StarRocks。

图 6. 使用 StarRocks 进行数据湖分析

基于亚马逊云科技平台的性能基准测试

我们在亚马逊云科技平台上进行性能基准测试。通过 TPC-H 基准测试,我们比较了以下各项的性能:

  • 通过 StarRocks 2.2 查询本地 SSD 存储(EBS GP2 SSD)
  • 通过 StarRocks 2.2 查询 Hive 外表,查询数据存储于 Amazon S3 上
  • 通过 Amazon EMR 上的 Presto 0.261 针对 S3 存储上的 Hive 进行查询

测试环境

实例类型 vCPU 内存(GiB) EBS GP2 SSD 对象存储
3 * m5.4xlarge 16 64GB 64GB AWS S3

注意:三组测试所使用的计算环境相同。

软件版本

StarRocks Presto
V2.2 Presto 0.261 on Hive

查询

本博客使用了来自 TPC-H 基准测试的 22 个 SQL 查询。有关这些查询的更多详细信息,请参阅 StarRocks 社区的 TPC-H Benchmarking 官方文档

测试结果

以下表格是 TPC-H 标准测试中的所有 22 个查询基于所 3 种不同解决方案的查询表现。结果如下图 7 所示。请注意,Hive 上的 Presto 在 22 个查询中的 2 个(查询 15 和 21)上超时(60 秒)。

Query StarRocks 2.2 Hive External table (ms) Presto on Hive (ms) StarRocks 2.2 Native EBS storage (ms)
Q1 4975 10032 1847
Q2 1370 4804 134
Q3 2422 7050 651
Q4 2491 7905 449
Q5 5435 15833 903
Q6 2695 4193 51
Q7 3775 10458 966
Q8 4558 13606 573
Q9 5290 14737 2442
Q10 3769 5564 484
Q11 1224 3905 160
Q12 3238 6122 338
Q13 3013 10685 1862
Q14 3348 4811 187
Q15 5470 60000 363
Q16 1669 1885 234
Q17 4217 33166 1011
Q18 6393 44440 3593
Q19 3492 7066 287
Q20 3878 9378 754
Q21 8531 60000 2998
Q22 1072 3924 477
Total 82325 339564 20764

图 7. TPC-H 100G 数据集测试结果

结论

基于亚马逊云科技平台部署的 StarRocks 解决方案专为实时数据分析而设计,支持物流管理和欺诈检测等场景,在这些场景中,必须对大规模数据集进行实时分析。 StarRocks 对本地存储的查询、StarRocks 对 Hive 外部表的查询、Presto 对 Hive 的查询(请注意,对于后两个场景,我们使用存储在 S3 中的相同数据)的基准测试结果显示,StarRocks 在所有 22 个查询中均优于 Presto。

此外,StarRocks on AWS 还针对快速增长的数据提供了可扩展的解决方案,以满足业务扩展需求。 Airbnb、Mobvista 等众多行业龙头企业已采用 StarRocks 作为其大数据平台的关键组成部分。

本篇作者

StarRocks

Linux 基金会项目 StarRocks 是新一代极速全场景 MPP 数据库,致力于帮助企业构建极速统一的湖仓分析新范式,是实现数字化转型和降本增效的关键基础设施。

丁杰

亚马逊云科技解决方案架构师,专注于 ISV 行业,具有多年开发和架构设计经验。