导 读 本文主要介绍长桥科技(长桥证券背后的科技公司)通过引入 Datavines 来解决多租户场景下数据质检任务挤占资源和耗时过长的问题,重点介绍了 Datavines 与其现有的数据平台的集成方案和应对业务需求所进行的二开特性。
Github: github.com/datavane/da…
欢迎关注、Star、Fork,参与贡献!
供稿单位 | 长桥科技
文章作者 | 吕诺格
Longbridge Whale(长桥科技)是一家技术驱动的金融科技公司,为各类证券经纪公司、外部资产管理公司、家族办公室、私人银行和超高净值人士提供领先的数字化解决方案。通过领先的自研金融科技,推动证券交易及财富管理的数字化发展。
业务背景与挑战
目前长桥数据平台是架在微众开源的 WeDataSphere 上,其一站式、全流程、全联通的数据开发理念与我们不谋而合,但组件里的数据质量 Qualitis 是 0.8.0 版本,底层强依赖 Spark 引擎(会使用 Yarn 资源)。我们集群在早高峰时 Yarn 的资源非常紧张,用 Spark On Yarn 去执行质检任务会导致任务延迟。在多租户的场景中,数据量可控但校验表数量却 N倍增长,Yarn 资源紧张的现象只会更加严重,所以急切需要将数据质量检查与 Spark On Yarn 剥离。我们意识到 DQC 在某种程度上类似即席查询,而公司目前 Trino 集群健壮,所以 DQC on Trino 势在必行。同时我们之前在 Qualitis 二开的 RDS 数据质量检测等功能依然需要保留,用户也已经习惯了 Qualitis 在 WeDataSphere 工作流中的页面配置。我们需要在短时间内开动一辆又快又稳的贴着"终极防线的数据质量"广告的复兴号,此过程并非一帆风顺,我们遇到了以下挑战:
- DQC on Trino:DQC 可与 Trino 集群结合,快速响应数据质量需求。
- 功能保留:保留在RDS数据质量检测、异源数据比对等功能的支持。
- 用户习惯:用户已习惯在 WeDataSphere 工作中进行全链路包含数据质量节点的页面配置。
- 实施目标:需快速上线。
- 开源引入:需要有良好的扩展性,方便与 WeDataSphere 体系& DolphinScheduler 友好集成;且在需要的时候校验规则、告警机制和时间宏变量好扩展。
解决方案选型
选型依据:on Trino/Presto/OLK;开发语言;功能的完备性;部署&二开简单;社区活跃;界面友好
| 平台 | 开源地址 | 开源协议 | 开发语言 | 活跃时间 | 执行引擎 | 开源团队 | 备注 |
|---|---|---|---|---|---|---|---|
| Qualitis | github.com/WeBankFinTe… | Apache-2.0 license | Java/Vue/Fes | 2024年 | spark/linkis | 微众 | 二开需要改动linkis代码(Java/Scala) |
| Apache Griffin | github.com/apache/grif… | Apache-2.0 license | Scala/Java/TypeScript | 2020年11月9日 | spark | eBay | |
| Deequ | github.com/awslabs/dee… | Apache-2.0 license | Scala | 2024年 | spark | 亚马逊 | |
| Great expectations | github.com/great-expec… | Apache-2.0 license | Python | 2024年 | |||
| DataCleaner | github.com/datacleaner… | LGPL-3.0 license | Java/前端基础三件套 | 2022年2月10日 | |||
| MobyDQ | github.com/ubisoft/mob… | Apache-2.0 license | Python/Vue | 2022年5月10日 | |||
| Soda Core | github.com/sodadata/so… | Apache-2.0 license | Python | 2024年 | |||
| Datavines | github.com/datavane/da… | Apache-2.0 license | Java/TypeScript | 2024年 | local(trino/rds等)/spark | datavane |
经过初步分析和对比,我们把目标锁定在 Datavines 上,对此我们进行了深度的调研,Datavines 总体架构如下:
以下是我们总结出来 Datavines 相比其他项目的优势:
1. 插件化设计
平台以插件化设计为核心,以下模块都支持用户自定义插件进行扩展
- 数据源:已支持 MySQL、Impala、StarRocks、Doris、Presto、Trino、ClickHouse、PostgreSQL、Oracle、SqlServer、dm等
- 检查规则:内置空值检查、非空检查、枚举检查等27个检查规则
- 作业执行引擎:已支持
Spark和Local两种执行引擎。Spark 引擎目前仅支持Spark2.4版本,Local 引擎则是基于JDBC开发的本地执行引擎,无需依赖其他执行引擎。 - 告警通道:已支持 邮件、飞书、钉钉和企微
- 错误数据存储:已支持
MySQL和本地文件(仅支持Local执行引擎) - 注册中心:已支持
MySQL和ZooKeeper
2. 支持多种运行模式
- 提供
Web页面配置检查作业、运行作业、查看作业执行日志、查看错误数据和检查结果 - 支持
在线生成作业运行脚本,通过datavines-submit.sh来提交作业,可与调度系统配合使用
3. 容易部署&高可用
- 平台依赖少,容易部署
-
- 最小仅依赖
MySQL既可启动项目,完成数据质量作业的检查
- 最小仅依赖
- 支持水平扩容,自动容错
-
无中心化设计,Server节点支持水平扩展提高性能- 作业
自动容错,保证作业不丢失和不重复执行
- 文档详细
Datavines 的插件式开发实践极具良好的扩展性,官方文档也提供了详细的插件开发步骤。
最终毫无疑问,Datavines 脱颖而出!Datavines 不仅源码和技术栈现代化,而且它的定位不只是数据质量监控平台,它在不断打磨成新一代数据可观测性平台(包含数据目录管理、数据质量监控、数据趋势洞察、数据血缘等),给我们探索和理解数据开辟了广阔的想象空间。
落地实践
与现有系统集成
前面提到目前长桥数据平台是架在微众开源的 WeDataSphere 上,所以我们的第一步要做的是与 WeDataSphere 集成,考虑到用户习惯了 Qualitis 配置页面,我们依然沿用,但我们同样保留了 Datavines 原生页面供用户进一步观察与排查。下图展示了 Qualitis 数据质量节点在整个工作流中的位置(所有节点都是通过左侧节点模块拖动到右侧工作流画布中)
双击数据质量节点,依然会出现 Qualitis 的配置页面,但背后对接的已经是 Datavines。
关键实现:
实现皮是 Qualitis,核是 Datavines 的关键在于我们侵入 DataSphereStudio 的 qualitis-appjoint ,主要改写了其中的 submit 、state、result 等方法去调用 Datavines 二开暴露出来的 http 接口。同时历史质检任务迁移需要将 where 条件里的 spark 语法转为 trino 语法(初始化逻辑实现,不需要用户一个一个去转化)。我们依然提供了 Datavines 的 web 访问入口:
在这个落地实践中,我们平滑地过渡到了 Datavines,可以看出来 Datavines 功能的完备性直接能对标上几近成熟的企业级数据质量解决方案 Qualitis ,当然各有千秋。
支持业务
多租户
公司处在 SaaS 化和租户化的业务环境中,所以会产生数据源&任务 1->n 的隔离复制(通过我们自研的 datapub 平台进行租户下发;数据源的命名规则上采取"团队_数据源类型_数据源名称_租户名"),可以发现界面的展示依然友好,也可以右上角切换为列表展示。
后面与项目作者的交流过程中得知,Datavines 的 Workspace 是他为了支撑租户化而做,这种优雅的方式没被当时的我钻研到,实为憾事。Datavines 当然还有更多优秀的功能,很多时候我在应对公司业务场景时不免因为折中而错过。
阈值模版
阈值模版支持不同工作日不同阈值,因为每周一有社区活动,每周五有结单业务,所以会造成不同工作日不同阈值的需求。该功能将会与“支持港美股交易日历”共同应对质量校验的周期性。
实现原理:
在上一步我们创建好阈值模版后,就可以在质检任务中进行阈值模版的选择;当你选择好阈值模版后,质检任务每次运行都会判断当天是周几,便从阈值模版取到相应星期的阈值,如果取值为空时,会取默认的校验阈值。
阻塞功能
开启时当校验不通过会阻塞下游任务的运行且告警;关闭时不会阻塞下游任务,只会进行告警。
补数时跳过质检
补数时提供数据质量跳过选项是借助 Redis 做个人全局限时的 skipDQC
支持容器化
在公司应用资源收缩到 k8s 的大背景下,将 Datavines 进行了容器化,容器化的关键大多是 Dockerfile,简单如下:
提交到公司的 Maersk 平台上便可轻松发布:
注意⚠️:容器化的过程中注意改写 OSUtils 类中的 availablePhysicalMemorySize 和 loadAverage 方法。
借助开源反哺开源
知道 Datavines 是因为公众号文章《一站式数据可观测性平台 Datavines 正式开源啦》,标题上的可观测三个字夺人眼球,阅读文章后顿感这不正是我们想要的。在后面的部署和体验中发现 Datavines 的搭建很简单,页面很美观、上手很简单、操作很自然、功能很齐备,惊讶一个暂时没有 tag 的项目友好性&完整性上竟是如此恰到好处,时有惊艳。
加入社区
在我们将 Datavines 引入长桥数据平台的过程中遇到了一些 Bug ,比如 Sla related notification list error;同时结合公司业务需求,开发了飞书告警等功能,也积极回馈社区;其中一些 Feature 是做了普适性提交,比如飞书告警在我司层面需要@到专人,涉及到公司用户体系,与社区有一定差异。以下是提交的PR示例:
- [Fix][SLA] Fix Sla related notification list error #194
- [Feature][notification]Add Feishu Alarm #170
对社区的印象
Datavines 社区很活跃,主导者(GithubID:zixi0825)不仅是 Apache DolphinScheduler Committer,也是 Datavane 开源组织的创始成员,很明显的感受到他真是数年磨一剑的打磨 Datavines ,所以迟迟还没有正式 Release。在 Datavines 的用户交流群里,能很明显地感觉到越来越多的用户在调研和使用 Datavines、并有不少公司进行了投产。大家在群里积极反馈体验、改进、称赞和推广,作者和其他小伙伴积极及时响应。现在 Datavines 的贡献者来自全国各地,我相信很快也会来自全世界各地。
收益与期望
带来的收益:
- Datavines 上线以后,数据质检达成 max40min 到 max1min 的运行时效;
- 单纯数据质量的 web 板块 pv 降低 70% ,因为友好的告警内容足以排除质量问题;
- 不再给 DolphinScheduler 展现容错能力的机会,因为 Datavines 本身具备合理的重试机制,当然数据质量问题导致的失败不会重试的;
- 我们在实践中弱化了 Datavines 权限体系、Spark 执行引擎等功能,在后续的迭代中会逐渐打通,把 Spark 引擎作为大表质检的可选方案,收益 "on the way"
我们的计划:
- 计划后续将 Datavines 作为业务数据字典的入口,实现"大小数据融合"场景中的元数据变更下放,push 下游自动化和自助化变更行为;
- 为 text-to-sql 贡献一份力,与向量数据库能产生友好的元数据信息导入,比如枚举值的维护。
- 接入公司的 promethus+grafana 大盘,让关键链路的质量告警被值班人员第一时间感知,特别是涉及到北极星指标&关键报表的数据
对 Datavines 进一步的期望:
-
回到 Datavines 的初心——数据可观测:目前市面上有优秀的元数据产品如 odd-platform 、OpenMetadata 、Datahub 等,但我个人感觉不是很贴切国人的使用和交互方式,Datavines 有望在这一步上走出国人风采。
-
告警机制:因为有时候数据质量的校验结果需要告知不同团队的成员,往往不会把他们拉到同一个告警群,所以还是期望 Datavines 能够设计一套用户体系,去关联飞书、钉钉或者企业微信。
-
批量创建能力:比如针对同一张表可以选择多个字段对同类质检规则进行高效创建。
-
运维能力:希望有个统一运维质检任务的地方,可以根据团队或者其他条件筛选,执行跳过、终止等资源紧张时的取舍操作。
-
增加监控对象:是否能做一些指标监控或者对接BI平台做报表数据监控
-
搞个 Datavines logo 的 svg 图吧哈哈~
加入我们
Datavines 的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡献者参与到社区建设中来,和我们一起成长,携手共建更好的社区。
- 项目地址:
github.com/datavane/da… - 问题和建议:
github.com/datavane/da… - 贡献代码:
github.com/datavane/da… - 社区沟通: