编者荐语:
优秀开源项目推荐
以下文章来源于Datavines ,作者Datavines
[
Datavines .
下一代数据可观测性平台
](#)
导 读 本文主要介绍长桥科技(长桥证券背后的科技公司)通过引入 Datavines 来解决多租户场景下数据质检任务挤占资源和耗时过长的问题,重点介绍了 Datavines 与其现有的数据平台的集成方案和应对业务需求所进行的二开特性。
Github: https://github.com/datavane/d...
欢迎关注、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
https://github.com/WeBankFinT...
Apache-2.0 license
Java/Vue/Fes
2024年
spark/linkis
微众
二开需要改动linkis代码(Java/Scala)
Apache Griffin
https://github.com/apache/gri...
Apache-2.0 license
Scala/Java/TypeScript
2020年11月9日
spark
eBay
Deequ
https://github.com/awslabs/deequ
Apache-2.0 license
Scala
2024年
spark
亚马逊
Great expectations
https://github.com/great-expe...\_expectations
Apache-2.0 license
Python
2024年
DataCleaner
https://github.com/datacleane...
LGPL-3.0 license
Java/前端基础三件套
2022年2月10日
MobyDQ
https://github.com/ubisoft/mo...
Apache-2.0 license
Python/Vue
2022年5月10日
Soda Core
https://github.com/sodadata/s...
Apache-2.0 license
Python
2024年
Datavines
https://github.com/datavane/d...
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节点支持水平扩展提高性能- 作业
自动容错
,保证作业不丢失和不重复执行
4. 文档详细
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 的目标是成为更好的数据可观测性领域的开源项目,为更多的用户去解决元数据管理和数据质量管理中遇到的问题。在此我们真诚欢迎更多的贡献者参与到社区建设中来,和我们一起成长,携手共建更好的社区。
- 项目地址:
https://github.com/datavane/d... - 问题和建议:
https://github.com/datavane/d... - 贡献代码:
https://github.com/datavane/d... - 社区沟通:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。