饿了么基于Flink+Paimon+StarRocks的实时湖仓探索

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 饿了么的实时数仓经历了多个阶段的演进。初期通过实时ETL、报表应用、联动及监控构建基础架构,随后形成了涵盖数据采集、加工和服务的整体数据架构。1.0版本通过日志和Binlog采集数据,但在研发效率和数据一致性方面存在问题。2.0版本通过Dataphin构建流批一体化系统,提升了数据一致性和研发效率,但仍面临新业务适应性等问题。最终,饿了么选择Paimon和StarRocks作为实时湖仓方案,显著降低了存储成本并提高了系统稳定性。未来,将进一步优化带宽瓶颈、小文件问题及权限控制,实现更多场景的应用。

摘要:本文整理自饿了么大数据架构师、Apache Flink Contributor 王沛斌老师在8月3日 Streaming Lakehouse Meetup Online(Paimon x StarRocks,共话实时湖仓架构)上的分享。主要分为以下三个内容:

  1. 饿了么实时数仓演进之路
  2. 实时湖仓方案选型与探
  3. 实时湖仓规划及展望

一、饿了么实时数仓演进之路

1. 饿了么典型实时应用场景

以上是饿了么在实时应用中的一些典型场景,和许多公司有相似之处。具体分为以下几个部分:

(1)实时 ETL:包括实时数据入湖入仓、实时数据建模、实时流量归因等。

(2)实时报表应用:包括营销活动直播、商家生意参谋、实时流量大盘、大促实时大屏、实时AB实验等。

(3)实时与在线应用的联动:包括商物流实时联动、实时人群特征及投放、个性化推荐、IOT信息同步、风控实时拦截等。

(4)实时监控与补偿:包括实时数据核对与订正、业务诊断预警、服务器异常监控等。

2. 饿了么数据架构大图

饿了么整体数据架构大图主要由三个层面组成,分别为数据采集层,数据加工层,数据服务层。相关的数据组件依托阿里云组件。整体数据采集使用 DataX 和 DRC 链路来进行数据库 Binlog 的采集。日志采集主要使用内部的 Omni 平台来收集用户行为数据,而应用层的日志通过 SLS 和 TT 来进行相应的日志接入。

数据仓库这一层是一个重点。一个是存储方面可以分为两块:一块是近实时的湖仓,采用 Paimon On OSS 方案来进行存储;而对于实时性要求更高的数据,使用的是 TT 和 SLS。在数仓计算层,使用的是 Dataphin、VVP(实时计算 Flink) 和 Flink 三件套。在数据服务层,主要的数据存储使用 ADB 和 Hologres,最近引入了 StarRocks 来结合湖仓进行落地。在这个存储基础上,通过内部的数据服务应用(包括繁星、方舟、FBI、量子等组件)来提供相应的数据服务。通过以上数据服务,构建了整体的数据产品和数据解决方案。

最核心的两个点是计算和存储。上图右边展示了整体计算变化的情况。右边第一张图显示了我们内部 Blink 和 Flink 的用量曲线。可以观察到,早期更多使用的是 Blink,随着 Flink 的进一步拓展,到2023年左右,开始大规模切换到 Flink。计划在今年将所有 Blink 下线,全部统一切换到 Flink。第二张图显示的是存储层的情况。存储层早期更多使用的是 ADB,现阶段更多使用 Hologres 来支持。未来 Hologres 的用量也会逐步扩大,并引入类似 StarRocks 这样的 OLAP 引擎,以提升团队整体研发效率。

3. 实时数仓1.0

基于上述的两个背景,接下来介绍一下我们内部当前实时数仓建设的情况。

实时数仓的1.0版本中,这是大多数公司早期版本的典型样子。我们通过日志和数据库的 Binlog 进行数据采集,这些数据最终进入 ODS 层。在 1.0 版本的早期阶段,我们投入了大量工作来建设 DWD 层。在 DWD 层,我们对一些共性的维度和逻辑进行了扩展,并屏蔽了多余的场景,建设了完善的 DWD 层群以供下游消费使用。

对于不同的应用场景,我们开发了相对独立的 ADS 层,这一层并未进行公共层的建设。而对于核心业务场景,我们采用了 Lambda 架构将历史数据通过 T+1 的方式导入到 OLAP 引擎中,以保证数据的稳定性。在此过程中会出现几个问题:首先是研发效率较低的问题,会产生较多的重复开发工作。其次,随着业务的变化,这些逻辑往往无法及时同步更新,导致数据一致性缺乏保障。这不仅增加了整体的运维成本,也增加了计存成本。

基于上述情况,我们期望达成以下两个目标:首先是确保数据能够更快、更准、更稳、更一致;其次是提升整体的开发效率和运维效率。具体的解决方案总结为四个要点:

(1)数据产品能力升级,收敛实时需求。

(2)夯实实时的 CDM 资产,收口指标加工逻辑。

(3)实时数仓架构方案升级,获取技术红利,降低研发复杂度。

(4)研发规范化及工具沉淀(流程卡点&实时基线等)。

4. 实时数仓2.0

上述第二点对应的是实时数仓 2.0 的具体方案。具体方案是建设核心的 CDM 层,将常见的共性维度和指标加工成 DWS 资产。这个方案是在去年年初提出的,整体方式是借助 Dataphin 来构建一个流批一体化的系统。

实时的 DWD 和离线的 DWD 通过 Dataphin 的逻辑表进行映射,在 Dataphin 上开发具体的 SQL 任务后, Dataphin 会将其翻译成 Flink 的流任务和批任务。在此基础上,结合 D2 的 Dataworks,根据每一个调度将每天的 T+1 任务触发,最终将数据回写到 OLAP 集群中。通过 OLAP 集群的 Binlog 来驱动下游的实时消费。这样下游的 ADS 层只需进行现有指标的简单统计或行列转化后将数据写入各自的存储以满足不同查询场景的使用和需求。

完成这条链路后,整体的核心资产消费链路和研发效率得到了提升,数据一致性也得到了保障。然而,仍然存在一些问题。例如它主要支持存量的重要业务,对于一些新兴业务这条链路并不适用。另外这链路并未完全实现流批一体化的目标。在 DWD 层数据实际上还是有两份存储,一份在 TT,一份在 ODPS。

此外,实时中间层更多使用的是 TT,但 TT 不支持检索和更新。在研发或数据订正的过程中,这会带来较高的成本。同时,TT 也不支持列裁剪。以流量中间层为例每次消费都会产生大量的带宽费用。再者,OLAP 集群内表存储成本往往比较高。因此,无论是从降低成本还是提升效率的角度来看,我们都希望引入更好的数据架构。因此,我们找到了当前比较热门的解决方案 —— Streaming Lakehouse。

二、实时湖仓方案选型与探索

那么我们想引入 Streaming Lakehouse 要如何实施呢?首先要做的就是具体的选型和探索落地的实践。

1、选型与测评方案

在整个选型过程中,使用了饿了么最核心的交易、营销和流量三个域的明细数据作为测试数据,并将数据写入对应的湖存储格式中。我们当时评测选择了 Paimon + Hudi 这两种湖格式。为了方便整体验证还与现有的 OLAP 集群的内表方案进行对比。

在 OLAP 引擎方面,主要引入了 StarRocks、Trino 引擎进行对比。在存储层,我们主要关注数据写入后的膨胀系数、流读和流写的性能,以及端到端的写入延迟。在 OLAP 部分,我们重点关注查询的耗时和单次查询的开销。

上图左边展示了我们在整个评测中所使用的版本。整体使用的集群规模大约为 200CU。由于规格的原因, StarRocks 的集群总共是 192CU。在这些组件中,大家比较关注的 StarRocks 和 Trino 我们是直接采用了阿里云的 EMR 5.15.1 版本进行部署的。

2、Paimon VS Hudi

Paimon 和 Hudi 哪个更优呢?

图中左上角展示了经过多轮测试后得出的结果,整体排名基本上都是 Paimon 优于 Hudi。同时,Paimon 的性能也接近 OLAP 集群内表方案的查询性能。但是在端到端的时效性方面,OLAP 集群内表方案仍然是最快,可以达到秒级别。Paimon 的时效性测试结果大约在1到5分钟,平均约为3分钟。Hudi 在这一块的延迟一般在10分钟左右。

基于上述测评结果,选择 Paimon 作为后续的湖存储格式。结合前面提到的三个月具体场景,上图可以看到对应的 Paimon 表的创建方式。对于交易和营销数据,由于需要实时更新,因此我们使用了一个PK表,指定了 Bucket 并同时开启了 ZSTD 压缩。在这个过程中,还需要通过 Sequence Field 进行版本控制。流量表则是一个 Append Only 表,基本上设置为 Bucket=-1,以支持自动化扩展。同时为了保障读写的性能平衡,所以每一个文件大概需要控制在一个 GB 范围内。

3、StarRocks VS Trino

在对比 StarRocks、Trino 的性能时,StarRocks 在各个方面都表现比较出色。是什么原因使得 StarRocks 的性能如此出色呢?首先,StarRocks 的 JNI Connector 对 Paimon 进行了良好的适配。其次,StarRocks 支持过滤下推。上图右下展示了饿了么基于 StarRocks 的一个 profile 截图,可以看到 “city_id” 和 “is_valid_order” 这两个字段实现了有效的下推。此外,StarRocks 还具备高效的向量化执行引擎,并且可支持对 Paimon 的 RO 表进行查询。最后,虽然我们目前还没有正式使用物化视图 +SQL 透明改写和 Data Cache 这两个功能,但可以预见一旦投入使用性能将会进一步提升。在这样的背景下,饿了么最终选择使用 StarRocks 和 Paimon 作为湖仓解决方案。

4、实时湖仓落地探索

经过多次探索,我们确定了如上图所示的湖仓建设架构。主要的数据处理链路使用 Flink 进行 Paimon 的流读流写,Paimon 的数据存储在内部 OSS 集群上,并通过 DLF(Data Lake Formation)进行元数据管理。通过 Paimon 的流读流写功能,支持实时数仓的分层建模。在特定场景下,利用 StarRocks 的物化视图进行应用层或汇总层的计算。同时基于明细数据通过 StarRocks 和 Hologres 的数据湖外表查询能力支持自助洞察分析的需求。具体应用场景包括:流量宝洞察分析、实时交易补贴自助分析以及客满的服务大屏等。

5、落地探索-DWD自助分析

接下来主要介绍基于交易和补贴的自助分析场景。首先,数据源提供订单流和补贴流两个实时流。在传统方案中,这两个流在Flink任务中进行双流 Join 处理后写入 OLAP 集群内表,再基于 OLAP 集群内表提供自助分析服务。引入 Paimon 之后,两条流直接写 Paimon 的 Partial-update 表,指定不同流中的 Sequence Group 来进行对应字段的版本控制。在这种情场景下,整体 Flink 的资源开销相比原来的双流 Join 方案减少了大约50%,同时系统的整体稳定性也显著提升。

然后在 StarRocks 这一层,通过 StarRocks 来读 Paimon 外表这块来支持的。上图右上角是整体的 Profile 的结果,可以看到大部分的瓶颈其实还是在 IO 这一层的。所以后续如果做数据湖的加速分析的话,IO 这一层还是优化的重点。

上图右下角展示了整个自助分析的结果示意图。与之前基于 OLAP 集群内表的实时数仓方案相比,这个方案在写入时效性上牺牲了1到5分钟,同时单次查询的耗时增加了约5%。然而,整体存储成本较原有的 OLAP 集群内表减少了约90%,Flink 任务的资源开销也减少了大约50%。

三、实时湖仓规划及展望

1、实时数仓3.0 展望

如果建设了实时湖仓,后续的加工链路可以进一步丰富,从而构建不同场景下的数据解决方案。相比之前的实时数仓2.0版本,DWD 层和 TT 层将逐步替换为数据湖。使用数据湖后,可以针对低频场景构建准实时或实时的物化视图,通过物化视图进行分层建模。同时,还可以利用 Paimon + Flink 的流读流写能力进行分层建模。在数据服务层,可以根据业务需求按需查询对应的 DWD、DWS 或 ADS 层,从而构建多元化的数据交付方案。

具体的交付方案如上图左下角所示,不同场景可以选择不同的交付方案,利用现有的实时数据资产,提升研发效率。然而这边仍会遇到一些问题:OSS 带宽瓶颈在压测过程中已经显现出来需要解决,同时 OSS 上的小文件问题也是亟需解决的。Paimon 的时效性目前为1到5分钟,对于强时效性诉求的业务仍需要保留 TT 链路。虽然 Paimon 和 StarRocks 现有的元数据可以通过 DLF 管理,但与内部原有的元数据管理缺乏打通,需要进一步拓展。此外,目前集群的权限控制相对较弱的,需要进行强化。

右边展示了后续希望重点推进的几个方面。首先是 StarRocks 物化视图,之前进行了轻度测试,因遇到一些问题,暂时未能显著提升研发效率,未来希望重点完善这一方案。此外,在 Flink 写入 Paimon 时,常因 Compaction 问题导致显著抖动,计划采用异步 Compaction 机制,以保障整个实施链路的稳定性。此外,诸如期望引入 Deletion Vector,显著提升查询效率。

目前,Paimon 实时中间层已应用于一些核心链路,未来希望将其推广到更多数据场景。还计划与 DataWorks 和 MaxCompute 进行集成,这属于生态系统建设的一部分。在 OSS 方面,我们希望通过冷热分层能力进一步降低成本。之前尝试结合 Paimon 的 Tag 机制来实现这一目标,但暂时还未找到理想的解决方案。

2、回顾

最后回顾一下饿了么整体实时数仓的建设历程,大致可以分为几个阶段。首先是相对原始的开发阶段,这一阶段主要建设实时的 DWD 层,各个应用层通过 Flink 任务各自生成自己的 ADS 数据。在这一过程中,ADS 层出现了大量数据一致性问题和重复开发的问题。为了解决这些问题,我们构建了实时的 CDM 层,从而解决了共性问题。然而,对于新增业务和场景的支持仍显不足。因此,我们引入了实时湖仓方案。虽然该方案目前仍在探索阶段,但已经在一些具体场景中实现了落地。未来,我们希望在 Paimon 和 StarRocks 上进行更多的探索和应用。

更多内容

img


活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算 Flink 版现开启活动:
新用户复制点击下方链接或者扫描二维码即可0元免费试用 Flink + Paimon
实时计算 Flink 版(3000CU*小时,3 个月内)
了解活动详情:https://free.aliyun.com/?utm_content=g_1000395379&productCode=sc

retouch_2024070417440476.jpg

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
SQL 流计算 关系型数据库
基于OpenLake的Flink+Paimon+EMR StarRocks流式湖仓分析
阿里云OpenLake解决方案建立在开放可控的OpenLake湖仓之上,提供大数据搜索与AI一体化服务。通过元数据管理平台DLF管理结构化、半结构化和非结构化数据,提供湖仓数据表和文件的安全访问及IO加速,并支持大数据、搜索和AI多引擎对接。本文为您介绍以Flink作为Openlake方案的核心计算引擎,通过流式数据湖仓Paimon(使用DLF 2.0存储)和EMR StarRocks搭建流式湖仓。
358 4
基于OpenLake的Flink+Paimon+EMR StarRocks流式湖仓分析
|
1月前
|
消息中间件 人工智能 监控
Paimon x StarRocks 助力喜马拉雅直播实时湖仓构建
本文由喜马拉雅直播业务与仓库建设负责人王琛撰写,介绍了喜马拉雅直播业务的数据仓库架构迭代升级。文章重点分享了基于 Flink + Paimon + StarRocks 实现实时湖仓的架构及其成效,通过分钟级别的收入监控、实时榜单生成、流量监测和盈亏预警,大幅提升了运营效率与决策质量,并为未来的业务扩展和 AI 项目打下坚实基础。
218 5
Paimon x StarRocks 助力喜马拉雅直播实时湖仓构建
|
2月前
|
存储 数据采集 大数据
Flink实时湖仓,为汽车行业数字化加速!
本文由阿里云计算平台产品专家李鲁兵(云觉)分享,聚焦汽车行业大数据应用。内容涵盖市场趋势、典型大数据架构、产品市场地位及能力解读,以及典型客户案例。文章详细介绍了新能源汽车市场的快速增长、大数据架构分析、实时湖仓方案的优势,以及Flink和Paimon在车联网中的应用案例。
195 8
Flink实时湖仓,为汽车行业数字化加速!
|
1月前
|
数据采集 运维 DataWorks
DataWorks on EMR StarRocks,打造标准湖仓新范式
本文整理自阿里云计算平台产品专家周硕(簌篱)在阿里云DataWorks on EMR StarRocks解决方案介绍中的分享。介绍了阿里云DataWorks与EMR Serverless StarRocks的结合使用,详细阐述了在数据同步、数据消费、数据治理三大场景中的核心能力。DataWorks作为大数据开发治理平台,提供了从数据建模、数据集成、数据开发到数据治理的全链路解决方案,结合StarRocks的高性能分析能力,帮助企业实现OLAP分析、湖仓一体开发及数据综合治理,满足复杂业务场景下的需求,提升数据处理和分析效率。
77 4
|
1月前
|
分布式计算 大数据 OLAP
AnalyticDB与大数据生态集成:Spark & Flink
【10月更文挑战第25天】在大数据时代,实时数据处理和分析变得越来越重要。AnalyticDB(ADB)是阿里云推出的一款完全托管的实时数据仓库服务,支持PB级数据的实时分析。为了充分发挥AnalyticDB的潜力,将其与大数据处理工具如Apache Spark和Apache Flink集成是非常必要的。本文将从我个人的角度出发,分享如何将AnalyticDB与Spark和Flink集成,构建端到端的大数据处理流水线,实现数据的实时分析和处理。
69 1
|
3月前
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。
|
1月前
|
存储 分布式计算 流计算
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
本文介绍了阿里云开源大数据团队在实时计算领域的最新成果——向量化流计算引擎Flash。文章主要内容包括:Apache Flink 成为业界流计算标准、Flash 核心技术解读、性能测试数据以及在阿里巴巴集团的落地效果。Flash 是一款完全兼容 Apache Flink 的新一代流计算引擎,通过向量化技术和 C++ 实现,大幅提升了性能和成本效益。
1163 73
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
zdl
|
1月前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
155 56
|
5月前
|
存储 监控 大数据
阿里云实时计算Flink在多行业的应用和实践
本文整理自 Flink Forward Asia 2023 中闭门会的分享。主要分享实时计算在各行业的应用实践,对回归实时计算的重点场景进行介绍以及企业如何使用实时计算技术,并且提供一些在技术架构上的参考建议。
862 7
阿里云实时计算Flink在多行业的应用和实践
|
4月前
|
SQL 消息中间件 Kafka
实时计算 Flink版产品使用问题之如何在EMR-Flink的Flink SOL中针对source表单独设置并行度
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

相关产品

  • 实时计算 Flink版
  • 下一篇
    DataWorks