干货 | 节约60%开发工时,离在线一体化数仓系统在携程旅游的落地实践
作者简介
Chengrui,携程后端开发专家,关注实时数据处理、AI基础平台建设以及数据产品等领域。
一、业务痛点
实时需求烟囱开发模式 中间数据可复用性差 离在线数据开发割裂 数据生产->服务周期长 实时表/任务杂乱、无法管理 实时血缘/基本信息/监控等缺失 实时数据 质量监控无工具 实时任务 运维门槛高 质量体系弱
二、业务目标
实现离在线数据开发方案标准化,如标准化数据处理、离在线代码兼容、算力融合等
分钟级数据部署,实现BI同学层面的数据接口注册、发布、调试等可视化操作
2.2 质量层面
数据内容DQC,如内容对不对、全不全、是否及时、是否离在线一致等
数据任务预警,如有无延迟、有无反压、吞吐怎么样、系统资源够不够等
2.3 管理层面
可视化管理平台,如全链路血缘、数据表/任务、质量覆盖率等基本信息
一体化数仓全流程规范,如数据建模规范、数据质量规范、数据治理规范、存储选型规范等
三、项目架构
项目架构如下图,该系统主要包括:原始数据 -> 数据开发 -> 数据服务 -> 数据质量 -> 数据管理等模块,提供实时数据秒级处理、数据服务分钟级部署的能力,供实时数据开发同学、后端数据服务开发使用。
不同数据来源的数据首先经过标准化ETL组件进行数据标准化,并经过流量转发工具进行数据预处理,使用流批融合工具以及业务数据处理模块进行分层分域建设,生产好的数据使用数据服务模块直接将数据进行数据api部署,最终供业务应用使用,整个链路会有对应的质量和运维保障体系。
4.1 数据开发
同维度的数据来源、解析方式可能有多种
使用到的埋点数据占总量的比例大约20%,全量消费资源浪费严重,且每个下游都会重复操作
新增埋点后,数据处理需要开发介入(极端情况下涉及到全部使用方)
如下图,流量转发工具,具备动态接入多个数据源,并且做简单的数据处理,并且将有效数据进行标准化后写入下游,可解决上述问题。
方案1-离在线数据简单融合
背景
解决方案
背景
分层简单,时效性强
规则配置响应迅速,可承接大量的复杂UDF
规则引擎等处理
兼容整个java生态
BI SQL开发人员基本无法介入、强依赖开发
SQL很多场景,使用java开发成本高,稳定性差
没有有效的数据分层
过程数据基本不可用,如果要保存过程数据,需要重复计算,浪费计算资源
解决方案
方案3
背景
SQL化
天然分层查询
数据不一致的问题
binlog在insert的时候没啥问题,但是更新和删除不好搞,而且更新的时候要做大量的去重操作,sql很不友好
长时间数据聚合,部分算子如max、min等flink状态大,容易不稳定
还要考虑kafka数据乱序,导致的数据覆盖问题
解决方案
SQL化
天然分层查询
数据一致
FLink状态小
可支持长时间的持久化数据聚合
无需关心binlog乱序、update等带来的问题
并发扛不起来,强依赖olap引擎性能,我们在数据源的时候会window限流,或者水平扩容db
sink时与回撤流结合被打断,比如:group by,其实就是无脑的upsert,udf的聚合没法替代flink原生的聚合
4.2 数据服务
4.3 数据质量
正确性/及时性/稳定性
4.3.2 数据任务
上游任务
4.4 数据管理
五、展望
“携程技术”公众号
分享,交流,成长