提效10倍:基于Paimon+Dolphin湖仓一体新架构在阿里妈妈品牌业务探索实践
1. 业务背景
阿里妈妈品牌广告数据包括投放引擎、下发、曝光、点击等日志,面向运筹调控、算法特征、分析报表、诊断监控等应用场景,进行了品牌数仓能力建设。随着业务发展,基于Lambda架构的数仓开发模式,缺陷日益突出:
数据开发效率低,面向一些业务场景,需要同时开发离线和实时两套任务,开发和运维成本增加。
存储成本增加,需要维护离线和实时两份存储,存储代价大。即使实时数仓开发,也需要将存储在TT的各层数据回流ODPS,用作数据备份和case排查,增加了额外存储开销。
计算资源消耗大,离线和实时任务需要消耗ODPS和Flink计算资源。
通过数据湖+OLAP湖仓一体架构,对传统数据链路进行升级。流批一体的开发模式,不仅节省了人力开发运维成本,降低计算存储资源消耗,许多业务场景下数据时效性和查询效率显著提高。
2. Paimon湖存储
Apache Paimon从Apache Flink社区内部孵化出来,是新一代的湖格式,创新性地使用LSM结构,将实时更新引入Lakehouse架构中。
2.1 相关概念
🏷 Schema
Paimon表元数据,包含表字段定义和配置参数等。
🏷 Snapshot
数据快照,捕获表在某个时间点的状态。用户可以通过最新的快照来访问表的最新数据。
🏷 Manifest
存储Snapshot的文件增删记录信息。
🏷 Partition
Paimon采用与ODPS相同的分区概念来分离数据。
🏷 Bucket
分区表或非分区表数据组织细分为存储桶,可以有效读写数据。
🏷 Data Files
数据文件按分区和存储桶分组,每个存储桶目录包含变更日志文件。Paimon支持使用 orc、parquet、avro作为数据文件格式。
2.2 为何选择Paimon?
Paimon依托Flink社区,生态更加开放,向下支持盘古、OSS等存储,向上支持Flink、Spark等计算引擎,以及各类OLAP引擎。Paimon功能很完善,支持流读流写和批读批写,支持主键表更新,聚合表和部分更新表等能力,是一种读写性能好、存储成本低的湖存储格式。
3. Dolphin相关能力
Dolphin作为OLAP查询引擎,在Paimon湖存储之上沉淀了许多能力,包括产品化和性能优化等技术能力。
3.1 产品化能力
🏷 极光
极光是基于Dataworks插件化框架打造,面向广告领域的一站式研发平台,可通过极光界面创建、写入、查询Paimon表。用户不用关心表的具体参数配置,如有特殊需求,也可以自定义配置。通过极光面向用户透出Paimon+Dolphin的整体能力。
🏷 FBI报表
FBI是用于数据分析和可视化展示的通用工具,可以帮助用户快速搭建各类报表进行数据分析。
通过定义Dolphin作为数据源,用户自己写好业务SQL,可以在FBI报表查询Paimon数据,使用上非常简单。
🏷 黄金眼监控
黄金眼是一个智能化监控系统,包括数据可视化、智能监控告警等功能。黄金眼支持用户使用Paimon作为数据源,通过调用Dolphin提供查询服务。用户按照黄金眼数据接入规范写入Paimon表,在黄金眼界面选择查询条件并展示结果信息。
3.2 技术能力建设
3.2.1 非精确UV计算
PV/UV是常用的数据分析指标,精确UV往往会消耗大量的计算资源,近似UV能满足多数业务场景需要。
Paimon通过定义theta_sketch聚合函数,可以实现非精确UV计算,用作基于Flink任务的数据生产消费场景。
Dolphin扩充了Paimon的非精确UV计算能力,定义了一种新的聚合函数hll_sketch,将UV的近似结果结合OLAP分析场景使用。使用步骤如下。
定义paimon表
写入paimon表参数定义包括merge-engine和fields.xxx.aggregate-function,将后者定义为hll_sketch。
CREATE TABLE IF NOT EXISTS `brand_lakehouse`.`brand`.`uv_table`
(`order_id` STRING NOT NULL,`uv` BYTES,PRIMARY KEY (order_id) NOT ENFORCED
)
WITH ('fields.uv.aggregate-function' = 'hll_sketch','merge-engine' = 'aggregation'
)
; flink写入paimon表
insert into `brand_lakehouse`.`brand`.`uv_table`
selectt.pid as pid,HllSketchFunction(CAST(t.aid as BIGINT)) as uv
from brand_ob_midlog,LATERAL table (BrandOBMidLogCommonParser(content)) as t
; Dolphin查询
select hll_sketch_get_estimate(hll_sketch_in(cast(encode(uv,'base64')as cstring)))
from uv_table
where pid = 'xxx'; 3.2.2 支持SST格式扩展
Paimon支持orc、parquet、avro等列存和行存格式,适用于各类分析场景。虽然Paimon可以定义主键表,但对于QPS稍高(1000以上)的点查场景,查询性能不高。Dolphin支持创建和写入sst格式的Paimon表,以适配对QPS要求更高的业务场景。
使用上仅需要定义文件格式file.format=sst,并结合PRIMARY KEY字段定义。
CREATE TABLE `brand_lakehouse`.`brand`.`brand_aid_behavior_table`
(aid STRING,behavior STRING,dt STRING,PRIMARY KEY (aid, dt) NOT ENFORCED
)
WITH ('maxcompute.life-cycle' = '3','bucket' = '100','bucket-key' = 'aid','consumer.expiration-time' = '24h','merge-engine' = 'deduplicate','changelog-producer' = 'lookup','write-mode' = 'change-log','snapshot.time-retained' = '8h','file.format' = 'sst'
)
;INSERT into `brand_lakehouse`.`brand`.`brand_aid_behavior_table`
SELECTaid,behavior,DATE_FORMAT(now(), 'yyyyMMdd') as dt
from brand_midlog
; 3.2.3 查询性能优化
Dolphin可以通过hsf接口查询Paimon表,对外提供高性能查询能力。
查询性能相比Flink、Odps等计算引擎,查询rt更低;相比Holo、StarRocks等OLAP引擎,优势明显。
高QPS低RT性能
分布式多节点(以100个节点16 core64G内存存储pangu hdd为基准)可承接流量:
4. 品牌数据链路升级
4.1 业务场景
品牌数据面向不同业务场景,对于数据时效性以及业务查询范式有所不同。
4.2 业务改造升级
面向品牌数据的新老任务,我们通过paimon+dolphin湖仓一体架构进行链路升级,主要工作涉及基础数据入湖和业务逻辑实现。对于能直接通过查询明细层Paimon表满足业务的使用场景,直接通过调用Dolphin查询接口或极光将数据透出;对查询性能要求更高或业务表征逻辑较为复杂的使用场景,通过构建物化层或编写复杂业务逻辑写回Paimon表,再对外透出加工后的数据。
4.2.1 数据入湖
品牌数据链路主要包括引擎日志数据、曝光点击等网关数据。
Paimon表的写入模式(write-mode)有change-log和append-only两种。change-log主要用于主键表数据的写入、更新、删除,append-only只支持数据的插入,不支持primary key,类比TT、Kafka的写入模式。
对数据质量要求较高的业务场景,我们使用change-log模式,结合merge-engine设置来实现业务数据去重。对于数据量很大但对质量要求稍低的场景,采用append-only模式。
主键表
CREATE TABLE `alimm-brand-lakehouse`.`brand`.`brand_imp_acc_log`
(pkey STRING...,dt STRING,hh STRING,PRIMARY KEY (dt, hh, pkey) NOT ENFORCED
) PARTITIONED BY (`dt`, `hh`)
WITH ('bucket' = '100','write-mode' = 'change-log','merge-engine' = 'first-row','maxcompute.life-cycle' = '180','bucket-key' = 'pkey','changelog-producer' = 'lookup','consumer.expiration-time' = '24h','snapshot.num-retained.min'='3','snapshot.num-retained.max'='5'
)
;INSERT INTO `alimm-brand-lakehouse`.`brand`.`brand_imp_acc_log`
SELECTpkey... ,DATE_FORMAT(now(), 'yyyyMMdd') as dt,DATE_FORMAT(now(), 'HH') AS hh
from brand_imp_acc_log,lateral table(BrandLogParserUDTF(content)) as T(...)
; Append表
CREATE TABLE IF NOT EXISTS `alimm-brand-lakehouse`.`brand`.`brand_sn_trace_log`
(campaign_id BIGINT...,dt STRING,hh STRING
)
PARTITIONED BY (dt, hh)
WITH ('maxcompute.life-cycle' = '30','bucket' = '1000','bucket-key' = 'session_id','consumer.expiration-time' = '24h','write-mode' = 'append-only','snapshot.time-retained' = '24h','changelog.time-retained' = '24h','partition.expiration-time' = '30d','partition.timestamp-formatter' = 'yyyyMMdd','partition.timestamp-pattern' = '$dt','snapshot.num-retained.min'='3','snapshot.num-retained.max'='5'
)
;INSERT into `alimm-brand-lakehouse`.`brand`.`brand_sn_trace_log`
SELECTcampaign_id...,DATE_FORMAT(now(), 'yyyyMMdd') as dt,DATE_FORMAT(now(), 'HH') as hh
from brand_sn_ht_trace_log,lateral table(BrandSNParseUDTF(content)) as T(campaign_id, ...)
; 4.2.2 业务升级
场景1 品牌履约实时报表
通过品牌履约报表,查看履约中需要交付的指标完成进度,及时发现有交付风险的订单,并分析大盘整体交付指标完成进度分布。
以前数据链路基于odps表实现,数据时效性为小时级。每年双十一大促期间,需要值班同学在0点放量时盯盘,确保品牌广告正常投放,数据时效性差增大了各方人力成本。通过paimon+dolphin对原有链路进行升级,数据时效性由1小时降低到8分钟,并在第一时间发现投放链路可能存在的问题。
业务查询范式比较复杂,经过Dolphin优化查询性能,性能提升了50%。
注:上图为升级后的数据链路,以前链路未画出,可以理解为各部分数据均为odps表。
场景2 品牌多目标调控
品牌广告多目标调控包含售卖组/投放计划维度,全投放周期/天级/小时级的指标曝光/点击/TA/N+reach的诸多指标。由于涉及整个投放计划周期的指标计算,在数据链路上采用了Lambda架构实现。通过paimon对原数据链路进行升级,从计算和存储上实现流批一体,结合paimon自带聚合和部分更新能力,极大简化了数据开发流程。计算、存储资源以及开发成本均降低了50%以上。由于业务场景对QPS要求较高,经过Dolphin优化,支持QPS从50提高到700,rt从1s降低到100ms,性能提升10倍以上。
场景3 品牌线实时特征生产
品牌数仓基于paimon流式湖仓升级原数据链路,将曝光、点击、触达等日志数据写入paimon。
计算近一天时间窗口内投放计划/创意/广告位/店铺/类目等维度的曝光点击实时特征,并利用paimon表partial update的能力,基于aid粒度join曝光点击实时特征数据,将aid粒度各个维度的完整特征数据提供给业务方。
实时特征数据升级提升了特秀合约广告的算法效果,特秀精排CTR模型在首秀、快秀、购后各资源位ctr均有明显提升(2%以上)。
4.3 业务收益
品牌数据链路通过Paimon+Dolphin湖仓一体升级,整体计算和存储成本降低60%以上,人力成本降低50%,业务数据时效性从小时级降低到分钟级,查询性能从分钟级降低到秒级。不同业务场景具体收益点稍有差别。
5. 总结与展望
Paimon+Dolphin湖仓一体架构对业务进行升级,可以给业务侧带来如下收益:
流批一体数据开发模式,减少开发和运维成本
对于ODPS离线表查询为主的场景,数据时效性从小时级以上降低到分钟级
对于以Lindorm/Holo存储为主的分析类业务场景,在满足查询rt的前提下,能极大降低存储成本,并做到数据复用
后续我们将继续推广Paimon+Dolphin湖仓一体架构,面向更多的广告业务场景,以数据湖+OLAP引擎的新模式对业务数据进行升级,实实在在为业务赋能。
▐ 关于我们
阿里妈妈Dolphin营销引擎,最初定位为解决通用OLAP在人群和场景圈选的计算性能问题,历经多年的技术发展与沉淀,目前已形成覆盖OLAP、AI、Streaming和Batch四大方向的智能超融合引擎,提供针对营销场景投前、投中、投后全链路的商家工具和算法策略迭代。欢迎感兴趣同学加入我们!

↑近期热招岗位,欢迎扫码了解&投递↑
也许你还想看
丨AI生成存储基座:自研超大规模向量数据库 Dolphin VectorDB
丨Dolphin:面向营销场景的超融合多模智能引擎
丨阿里妈妈Dolphin分布式向量召回技术详解
丨阿里妈妈Dolphin智能计算引擎基于Flink+Hologres实践
丨Dolphin Streaming实时计算,助力商家端算法第二增长曲线
丨面向数智营销的 AI FAAS 解决方案
丨FAE:阿里妈妈归因分析与用户增长分析引擎
丨大模型时代的阿里妈妈内容风控基础服务体系建设
丨开源greenplum向量计算库:https://github.com/AlibabaIncubator/gpdb-faiss-vector
END

关注「阿里妈妈技术」,了解更多~

喜欢要“分享”,好看要“点赞”哦ღ~
相关文章:
提效10倍:基于Paimon+Dolphin湖仓一体新架构在阿里妈妈品牌业务探索实践
1. 业务背景 阿里妈妈品牌广告数据包括投放引擎、下发、曝光、点击等日志,面向运筹调控、算法特征、分析报表、诊断监控等应用场景,进行了品牌数仓能力建设。随着业务发展,基于Lambda架构的数仓开发模式,缺陷日益突出:…...
Deepseek快速做PPT
背景: DeepSeek大纲生成 → Kimi结构化排版 → 数据审查,细节调整 DeepSeek 拥有深度思考能力,擅长逻辑构建与内容生成,它会根据我们的问题进行思考,其深度思考能力当前测试下来,不愧为国内No.1,而且还会把中间的思考过程展示出来,大多时候会给出很多我们意想不到的思…...
论文解读 | AAAI'25 Cobra:多模态扩展的大型语言模型,以实现高效推理
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 个人信息 作者:赵晗,浙江大学-西湖大学联合培养博士生 内容简介 近年来,在各个领域应用多模态大语言模型(MLLMs&…...
uniapp修改picker-view样式
解决问题: 1.选中文案样式,比如字体颜色 2.修改分割线颜色 3.多列时,修改两边间距让其平分 展示效果: 代码如下 <template><u-popup :show"showPicker" :safeAreaInsetBottom"false" close&quo…...
HDFS Java 客户端 API
一、基本调用 Configuration 配置对象类,用于加载或设置参数属性 FileSystem 文件系统对象基类。针对不同文件系统有不同具体实现。该类封装了文件系统的相关操作方法。 1. maven依赖pom.xml文件 <dependency><groupId>org.apache.hadoop</groupId&g…...
【华三】STP的角色选举(一文讲透)
【华三】STP的角色选举 一、引言二、STP基础概念扫盲三、根桥选举过程详解四、根端口选举过程详解五、指定端口选举过程详解六、阻塞端口七、总结与配置建议七、附录**1. BPDU字段结构图(文字描述)****2. 华三STP常用命令速查表** 文章总结 一、引言 在…...
【C#零基础从入门到精通】(二十六)——C#三大特征-多态详解
【C#零基础从入门到精通】(二十六)——C#三大特征-多态详解 在 C# 中,多态是面向对象编程的重要特性之一,它允许不同的对象对同一消息做出不同的响应。多态可以分为静态多态和动态多态,下面将详细介绍它们以及各自包含的知识点。 多态概述 多态性使得代码更加灵活、可扩展…...
宇树科技13家核心零部件供应商梳理!
2025年2月6日,摩根士丹利(Morgan Stanley)发布最新人形机器人研报:Humanoid 100: Mapping the Humanoid Robot Value Chain(人形机器人100:全球人形机器人产业链梳理)。 Humanoid 100清单清单中…...
Java集合框架全解析:从LinkedHashMap到TreeMap与HashSet面试题实战
一、LinkedHashMap ①LinkedHashMap集合和HashMap集合的用法完全相同。 ②不过LinkedHashMap可以保证插入顺序。 ③LinkedHashMap集合因为可以保证插入顺序,因此效率比HashMap低一些。 ④LinkedHashMap是如何保证插入顺序的? 底层采用了双向链表来记…...
goland无法debug项目
1、其实个原因是因为正在使用的Delve调试器版本太旧,无法兼容当前的Go语言版本1.2。Delve是Go语言的一个调试工具,用于提供源码级别的调试功能。Go语言每隔一段时间会发布新版本,而相应的调试器Delve也可能会更新以提供新的特性或修复已知问题…...
深入探索 DeepSeek 在数据分析与可视化中的应用
在数据驱动的时代,快速且准确地分析和呈现数据对于企业和个人都至关重要。DeepSeek 作为一款先进的人工智能工具,凭借其强大的数据处理和可视化能力,正在革新数据分析的方式。 1. 数据预处理与清洗 在进行数据分析前,数据预处理…...
python面试题整理
Python 如何处理异常? Python中,使用try 和 except 关键字来捕获和处理异常 try 块中放置可能会引发异常的代码,然后在except块中处理这些异常。 能补充一下finally的作用吗? finally 块中的代码无论是否发生异常都会执行…...
大型装备故障诊断解决方案
大型装备故障诊断解决方案 方案背景 在全球航空工业迅猛发展的背景下,我国在军用和民用飞机自主研发制造领域取得了显著成就。尤其是在国家大力支持下,国内飞机制造企业攻克了诸多关键技术难题,实现了从设计研发到生产制造再到售后保障的完整…...
基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考
系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…...
小怿学习日记(七) | Unreal引擎灯光架构
灯光的布局对于HMI场景中车模的展示效果有着举足轻重的地位。本篇内容将简单介绍ES3.1的相关知识,再深入了解Unreal引擎中车模的灯光以及灯光架构。 一、关于ES3.1 1.1 什么是ES3.1 ES3.1这个概念对于美术的同学可能比较陌生,ES3.1指的是OpenGL ES3.1&…...
网络运维学习笔记 013网工初级(HCIA-Datacom与CCNA-EI)DHCP动态主机配置协议(此处只讲华为)
文章目录 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)网关配置DHCP服务器配置如果没有DHCP服务器,只在网关上做DHCP服务器: DHCP(Dynamic Host Configuration Protocol,动态主…...
javaEE-14.spring MVC练习
目录 1.加法计算器 需求分析: 前端页面代码: 后端代码实现功能: 调整前端页面代码: 进行测试: 2.用户登录 需求分析: 定义接口: 1.登录数据校验接口: 2.查询登录用户接口: 前端代码: 后端代码: 调整前端代码: 测试/查错因 后端: 前端: lombok工具 1.引入依赖…...
HTML/CSS中并集选择器
1.作用:选中多个选择器对应的元素,又称:分组选择器 所谓并集就是或者的含义. 2.语法:选择器1,选择器2,选择器3,......选择器n 多个选择器通过,连接,此处,的含义就是:或. .rich,.beauty{color: blue;} 3.注意事项 1.并集选择器,我们一般竖着写 2.任何形式的选择器,都可以作为并…...
可编辑35页PPT | DeepSeek如何赋能职场应用
DeepSeek作为一款基于人工智能技术的多模态AI工具,近年来在职场应用中迅速崭露头角,以其强大的功能和高效的表现赢得了广泛的赞誉。DeepSeek融合了文本生成、图像创作、数据分析与可视化等多种功能,为职场人士提供了前所未有的便利和效率提升…...
CSS `transform` 属性详解:打造视觉效果与动画的利器
CSS transform 属性详解:打造视觉效果与动画的利器 引言一、transform 属性简介二、平移(Translation)三、旋转(Rotation)四、缩放(Scale)五、倾斜(Skew)六、组合变换&am…...
PostgreSQL WITH 子句详解
PostgreSQL WITH 子句详解 引言 在数据库查询中,WITH 子句(也称为公用表表达式或 Common Table Expressions,简称 CTE)是一种强大的工具,它允许开发者将查询结果集作为子查询或临时表使用。WITH 子句在 PostgreSQL 中有…...
告别手动计算!用Xilinx DDS Compiler 4.0 IP核快速生成可调频调相的正弦波(附Modelsim仿真步骤)
基于Xilinx DDS Compiler 4.0的智能信号生成实战指南 在FPGA开发中,快速生成高精度、可动态调整的正弦波信号是通信系统测试、雷达信号处理等场景的刚需。传统手动编写DDS代码不仅耗时,还容易引入相位误差和频率分辨率问题。Xilinx的DDS Compiler 4.0 IP…...
BitNet b1.58入门必看:从supervisord进程管理到WebUI调参完整指南
BitNet b1.58入门必看:从supervisord进程管理到WebUI调参完整指南 1. 项目概述 BitNet b1.58-2B-4T-gguf是一款极致高效的开源大模型,采用原生1.58-bit量化技术。这个模型最特别的地方在于它的权重只有-1、0、1三种值,平均每个权重仅占用1.…...
避坑指南:解决平头哥CDK编译RVB2601示例工程时‘缺少chippack’的几种方法
平头哥RVB2601开发实战:CDK环境配置与依赖缺失问题深度解析 第一次接触平头哥RVB2601开发板的开发者,往往会被其强大的IoT能力和丰富的生态资源所吸引。但当他们满怀热情地下载示例代码,双击.cdkproj文件准备大展拳脚时,却可能遭遇…...
使用爱毕业(aibiye),数学建模论文的复现和排版优化不再是难题
AI工具在数学建模论文复现与排版中能大幅提升效率。通过评测10款热门AI论文助手发现,部分工具可自动生成LaTeX代码、优化公式排版,甚至能基于草图快速复现复杂模型。智能改写功能可避免查重问题,而文献管理模块能自动整理参考文献格式。针对时…...
**eBPF实战进阶:从零构建高性能网络流量监控工具**在现代云原生架构中,**eBPF(extend
eBPF实战进阶:从零构建高性能网络流量监控工具 在现代云原生架构中,eBPF(extended Berkeley Packet Filter) 已成为内核级可观测性的核心支柱。它允许我们在不修改内核源码的前提下,安全地运行用户定义的程序来捕获、过…...
wireshark抓包看ip协议
注意:Wireshark 中没有单独一个叫做“IP”的协议条目。在 Wireshark 的 “Protocol” 列里,你永远不会看到一个孤零零的 IP 包。你看到的总是 TCP、UDP、ICMP、ARP 等。但这并不意味着 IP 协议不存在,恰恰相反,IP 协议是所有这些数…...
别再手动查表了!用Python脚本自动匹配PyTorch、torchvision、torchaudio版本(附代码)
解放双手!用Python自动化获取PyTorch生态兼容版本的全套方案 每次新建PyTorch项目时,最头疼的莫过于手动查找torchvision、torchaudio等配套库的兼容版本。官方文档的版本对应表不仅更新频繁,不同子项目还分散在各个仓库。更糟的是࿰…...
告别mstsc!用C# WinForm打造一个专属的远程桌面管理工具(支持Win11)
用C# WinForm构建企业级远程桌面管理工具 每次打开Windows自带的远程桌面连接工具mstsc,面对那个简陋的界面和每次都要重复输入的服务器信息,作为.NET开发者的你是否感到效率低下?本文将带你从零开始,用C# WinForm打造一个功能强大…...
