酷家乐基于DataHub建设元数据系统

619 阅读17分钟

1.前言

自13年成立以来,酷家乐已经发展了11个年头。数据一直是酷家乐的核心资产,支撑着我们业务的发展。大数据平台在酷家乐成立不久后就开始建设了。

我们的大数据基础组件主要包括HDFS存储系统,Kafka等消息中间件,还有用于实时计算的Flink,批处理的Hive、Spark计算引擎,数据湖(Paimon)、OLAP数据库(StarRocks)也在内部广泛使用。

在这些基础设施之上,我们也开发建设了许多系统和数据产品,比如:埋点采集系统(lms)、数据集成工具(Neverland)、离线任务开发平台(Batchworks)、实时任务开发平台(Streampark)、标签平台(Kupp)、自助分析平台(KineTic)、OneService平台(Metacenter)、自助BI平台(Tesseract)等。

随着业务的发展,各个部分的数据越来越多,任务也越来越多,参与开发的人员也越来越多,建设统一的元数据管理平台,沉淀相应数据资产,成了大势所趋,不得不做的一件事情。

一方面统一元数据管理,可以帮助用户更加方便快捷地找数、用数;另一方面全链路的数据血缘,可以方便用户掌握完整的数据流向,追溯产生问题的原因,同时也可以对数据治理做相应的支持。

2.建设流程

2.1我们的“物料”系统是什么?

首先声明,我们要建设的元数据(物料)系统是全链路的,端到端的元数据(物料)系统,涉及业务端、埋点端、采集层、计算层、服务层、应用层等。

这里我们引用物料流水线的思想,将一条生产链路上的产出都视为物料,物料在流水线上具有依赖关系,物料的元数据需要采集,采集后分析血缘,可以用于观测项、治理项。

基于我们的建设目标,梳理了目前公司数据加工链路中所有实体,也即我们有哪些、需要管理哪些“物料”,如下图所示:

全链路元数据实体.png

进一步,对“物料”进行量化,抽象出基本元数据“事实”和观测指标,这里列出元数据的一些基础信息及后续需要观测的指标(可以应用于削减物料,数据治理的相关工作),如下图所示:

image2024-7-19_15-34-11.png

其他补充,常见元数据的分类:

image2024-7-19_16-24-57.png

2.2核心思想抽象

基于上述的建设目标,做了一些核心思想的抽象,抽象出我们建设的元数据系统需要包含的核心功能以及相应的抽象产出

核心功能:

  • 元数据基础信息
  • 血缘关系
  • 访问行为观测

抽象产出:

  • 物料表
  • 上游依赖物料表
  • 访问实例表

①“物料表”:主要的作用是登记各层级的物料信息,可以随时查看有哪些物料及物料的属性,比如通过物料名称(表名,任务名,看板名等)来查询

②“上游依赖物料表”:主要的作用就是保存物料之间的血缘关系,可以应用于异常数据问题的排查、风控等方面

③“访问实例表”:主要的作用是登记物料的使用情况,例如物料的引用次数、访问次数等,类似于元数据的热度信息,基于此,可以用于"减负",数据治理等方面

补充:

物料表:

物料表字段名类型说明
idstring物料唯一id
material_namestring物料唯一名称
material_levelbigint物料所属层级
material_level_chsstring物料所属层级-中文
product_idbigint产品id
product_namestring产品名称
material_typebigint物料类型
material_type_chsstring物料类型-中文
can_access_aloneboolean能否单独访问
material_sourcestring数据源
ownerstring负责人
other_attributesstring其他属性
createdtimestamp创建时间
lastmodifiedtimestamp修改时间
deletedboolean是否删除
columns_jsonstring字段信息

上游依赖表:

上游依赖表字段名类型说明
relation_idstring依赖关系唯一id'
material_idstring物料唯一id
material_namestring物料唯一名称
material_typebigint物料类型
material_type_chsstring物料类型中文
product_namestring产品名
from_sourcestring依赖物料数据源
from_idstring依赖物料唯一id
from_material_namestring依赖物料唯一名称
from_material_typebigint依赖物料类型
from_material_type_chsstring依赖物料类型-中文
from_product_namestring依赖物料产品名
other_attributesstring其他属性

访问实例表:

访问实例表字段名类型说明
apply_idstring行为实例唯一id
material_idstring物料唯一id
material_namestring物料唯一name
material_typebigint物料类型
material_type_chsstring物料类型-中文
product_namestring产品名
other_attributesstring其他属性
createdtimestamp发生时间

总结:

这3个抽象产出的内容,可以说是元数据系统的基础,有了这些,就可以展示在任意的系统里,只不过是前端展示的不同,核心本质都是一样的;同时也可以应用到开源的元数据系统中,只需做相应的适配改造即可。

2.3元数据系统调研

一般而言,数据资产平台都具备各类数据检索、数据血缘、数据资产目录、元数据采集和管理、元数据详情查看等功能。

有了前面3个抽象产出,能不能有开源的元数据系统能承接这套东西,只需要适配开源系统的相应配置,将我们的3个抽象产出录入到开源系统里,就能完成整体元数据系统的建设?

因此有了下面的一些元数据开源系统的调研

DataHubOpenMetadata
githubgithub.com/datahub-pro…8.9k starsgithub.com/open-metada…3.5k stars
架构image2024-7-22_19-52-36.pngimage2024-1-19_11-10-31.png
涉及技术栈1.DataHub 使用Kafka 介导的摄取引擎将数据存储在三个独立的层中 -使用Kafka 流的MySQLElasticsearchneo4j2.这些层中的数据通过 API 服务层提供。除了标准的REST API之外,DataHub 还支持 Kafka 和GraphQL进行下游消费。DataHub 使用带有自定义注释的Pegasus 定义语言(PDL) 来存储模型元数据1.OpenMetadata使用MySQL作为数据库,用于存储统一元数据模型中的所有元数据2.OpenMetadata 不使用专用的图形数据库,但它使用JSON 模式来存储实体关系3.使用 OpenMetadata 的系统和人员可以直接调用或通过 UI 与 REST API 进行交互
搜索和发现ElasticsearchElasticsearch
元数据后端MySQLMySQL
元数据模型规范Pegasus 定义语言 (PDL)JSON 模式
元数据提取拉和推
元数据摄取拉动拉动
数据管理RBAC、标签、术语表术语、域和行动框架RBAC、术语表、标签、重要性、所有者,以及扩展实体元数据的能力
数据血缘列级列级(即将推出)
数据剖析通过第三方集成,如 dbt 和 Great Expectations内置,可使用外部工具
数据质量通过第三方集成,如 dbt 和 Great Expectations内置,可使用 Great Expectations 等外部工具
访问控制支持支持
访问行为观测不支持不支持

可行性验证:

大前提:满足我们物料系统的3大核心功能

DataHubOpenMetadata
基础元数据信息登记1.数据集成能力,目前支持多种数据源的集成,例如hive,mysql等,其他数据源可以自定义的方式,api拉取的方式集成进来2.元数据的存储:使用带注释的PDL,可能得进行相应的改造1.数据集成能力,目前支持多种数据源的集成,例如hive,mysql等,其他数据源可以自定义的方式,api拉取的方式集成进来
血缘关系DataHub支持列级数据血缘。除了自动线程捕获外,DataHub 还可让您从称为 "基于文件的线程 "的数据源以文件形式摄取线程数据DataHub 使用指定的基于 YAML 的 lineage 文件格式总结:需手动录入各个元数据实体之间的lineageOpenMetadata 的行数据 Python SDK 允许您使用用于存储行数据的 entityLineage 模式规范,从数据源实体中获取自定义行数据
访问行为观测目前是不支持访问行为观测这个功能但我们可以手动收集这些物料的访问行为数据,比如,近7天访问次数,近30天访问次数可以将这些数据手动录入到元数据系统中去,当作物料的1个属性目前是不支持访问行为观测这个功能

总结:

大体上,我们物料系统的3大核心功能,在开源的元数据系统上,都是能满足的,只需按照一定的规范进行改造,主要的涉及的工作就是:元数据基础信息录入、血缘关系录入、访问数据的录入

同时开源的元数据系统也支持更多的功能,比如访问控制、搜索和发现、数据管理、数据分析等功能,有了这些功能,可以说元数据系统,是比较完善了

2.4小结

至此,我们讨论了公司整体元数据系统的建设目标,以及核心思想的抽象,以及相关开源元数据系统的调研,最终我们选择了基于DataHub来构建我们的元数据系统。下面会具体讲DataHub在酷家乐的建设与实际使用。

3.DataHub实际应用

3.1概述

DataHub目前已经上线了wip版本,录入了30W+物料,包括lms、Neverland、数栈、数据小站sql看板、标签平台等,包含采集侧、计算侧、应用侧较为核心链路的元数据。如下图所示:

image2024-7-29_20-20-25.png

也基本构建完成了全链路的一个数据血缘,具体如下图所示:

image2024-7-29_20-33-12.png

目前只是构建了“表级”的全链路物料数据血缘,“字段级”血缘也在后续的建设规划中。

同时也做了如何利用DataHub来沉淀数据资产的相关探索,充分利用DataHub的Domains和Glossary Terms来划分业务域,数据目录,并沉淀相应的数据专题/数据资产,具体如下图所示:

Domains:

image2024-8-9_14-17-15.png

Glossary Terms:

image2024-7-29_20-47-47.png

目前,数据资产的沉淀还在探索阶段,未来会有更多的关于利用DataHub沉淀相关数据资产的使用案例,敬请期待。

3.2实际使用

按照实际使用场景,DataHub支持各类数据检索、数据血缘、数据资产目录、元数据采集和管理、元数据详情查看等功能。基本满足我们的使用需求

3.2.1元数据采集和管理

DataHub的数据集成能力还是十分强大的,目前支持多种数据源的集成,例如hive,mysql等,其他数据源可以自定义的方式,api拉取的方式集成进来,我们主要采用API的方式将我们全链路的物料(元数据)数据录入进来。

①API

以添加dataset和lineage为例,下面给出代码参考:

添加dataset:

image_17243951789574.png

添加lineage:

image_17243955094345.png

更多API的相关使用,参考官网:datahubproject.io/docs/0.13.1…

②ingestion

目前DataHub支持多种数据源集成,常用的比如hive、mysql等,其他如下图所示:

image2024-7-29_11-40-58.png

对于支持的数据源,我们只需配置对应的数据源链接即可,然后开启集成任务,DataHub会自动录入相应的元数据,更多的ingestion操作,可以参考官方文档:datahubproject.io/docs/ui-ing…

3.2.2数据检索

DataHub有强大的数据检索功能,具体参考:datahubproject.io/docs/how/se…

普通搜索

高级搜索

包括模式匹配、逻辑表达式和按特定字段匹配进行过滤

3.2.3元数据详情查看

以一张数栈物理表为例,DataHub包含了多项功能来丰富你所录入物料的元数据信息。如下图所示:

image2024-7-30_9-56-39.png

下面分为几个模块介绍:

功能说明使用案例
Schema这块我们主要存放物理表的字段信息,主要包含字段名称、字段类型、字段注释等核心信息,当然也可以给字段打上相应的Tag和Glossary Term,丰富信息,方便使用。同时也支持字段Schema的搜索,点击右上的小按钮,也可以查看字段的历史信息image2024-7-30_10-13-16.png
Documentation这块我们主要物料的关键说明信息,以物料表为例,可以录入一些核心的业务信息、中文名称、专有名词信息、计算逻辑信息、以及使用信息等,同时也可以通过Add Link按钮添加相关的链接,可以直接跳转image2024-7-30_10-22-45.png
Lineage这块我们主要存放物料血缘的相关信息,功能点比较丰富,具体如下所述:①Edit按钮,可以手动编辑物料的上下游血缘,一般不推荐手动操作,因为已经系统性录入了全量物料的血缘②Visualize Lineage按钮,可以跳转到数据血缘详情页,这里不再赘述,放在数据血缘部分讲③Downstream按钮,这其实是一个上下游血缘切换按钮,可以切换为Upstream,联动下方的⑩部分,就能展示该物料的上游数据血缘④Column Lineage按钮,这里会展示字段级的血缘,也可以相应的字段,目前这部分功能还在规划中⑤All Time按钮,可以按日期进行filter数据血缘,一般选择All Time⑥Refresh按钮,刷新数据⑦搜索框,可以按条件搜索,筛选满足条件的数据血缘实体⑧数据血缘筛选复选框,可以联动右侧的⑩部分,展示不同层级的数据血缘⑨Type、Platform、Environment,分别对应数据集的类型,平台类型,环境类型,能够方便根据所属类型进行数据筛选⑩这块就是具体的数据血缘展示,可以和上述功能进行联动展示,其中1st表示第一层级的意思image2024-7-30_10-29-51.png
Properties这块我们主要录入了物料的一些技术元数据和管理元数据,比如:物料的负责人、物料所属层级、物料类型、产品名称、是否删除、创建时间、更新时间等,其中物料其他额外的属性信息,封装在other_attributes的json字段中,用户可以按需查看image2024-7-30_11-37-11.png
Queries根据描述,可以创建、查看和共享此数据集的常用查询。待进一步探索image2024-7-30_11-46-31.png
Incidents根据描述,可以上报一些问题信息。待进一步探索image2024-7-30_11-50-34.png
总体侧边栏如图所示,这块是整体对于物料实体录入业务元数据的地方,分几个点说明:①Add Documentation:添加文档说明,和上面Documentation功能是一处,不再赘述②Add Link:添加链接③Add Owners:添加对应物料的负责人④Add Tags:给对应物料打上对应的tag,比如:层级tag、业务属性tag、专有名词tag、是否核心tag、是否推荐tag等,可以丰富物料的属性,沉淀相应数据资产⑤Add Terms:添加业务特性的术语,可以沉淀相应的数据专辑⑥Add Domain:添加业务域⑦Set Product:设置对应数据产品总结:有了这些功能,可以极大丰富我们物料的业务元数据信息,同时也可以沉淀相应业务域、以及数据专辑信息,沉淀相应数据资产,方便下游找数、用数image2024-7-30_11-53-36.png

3.2.4数据血缘

数据血缘是所有数据资产平台的核心功能之一,DataHub拥有强大的数据血缘功能,支持“表级”血缘和“字段级”血缘,下面简单介绍下,DataHub“表级”血缘在酷家乐的建设和使用。

image2024-7-30_12-22-22.png

如上图所示,从元数据详情页的Visualize Lineage按钮跳转进入到数据血缘的详情页,可以清楚的看到对应物料的上下游血缘,也可以点击“+”号展开对应物料的上游或下游。

其中Show Full Title按钮打开可以展示物料的全名,Show Colmuns按钮打开可以展示物料的字段消息,同时右上角展示了当前物料的上下游物料数

单击具体物料,左侧会显示对应物料的详情,点击view details可以跳转到该物料的详情页,点击close关闭此左侧页,如下图所示

image2024-7-30_12-26-2.png

总的来说,已经初步借助DataHub构建了全链路的一个“表级”血缘,可以根据血缘方便定位异常问题,后续也会继续拓展“字段”血缘的相关内容。

3.2.5数据资产沉淀

这块内容,是所有数据资产平台的重点,DataHub也提供了相应的功能来帮助用户,下面简单介绍下利用其Domains和Glossary Terms来沉淀相应数据资产,一些探索的实际案例:

功能说明实际案例
DomainsDataHub 支持将数据资产分组为称为域的逻辑集合。域是经过整理的顶级文件夹或类别,相关资产可以明确分组。域的管理可以集中进行,也可以分发给域所有者。目前,一项资产一次只能属于一个域。如图所示,基于DataHub建立了一些公司级的Domain的demo主要作用,对于数据资产进行分域、分组管理image2024-8-9_14-17-40.png
Glossary Terms在复杂的数据生态系统中工作时,使用共享词汇表来组织数据资产非常有用。DataHub 中的业务词汇表功能可帮助您做到这一点,它提供了一个框架来定义一组标准化的数据概念,然后将它们与数据生态系统中存在的物理资产相关联。业务词汇表由两个重要基元组成:术语和术语组。术语:具有特定业务定义的单词或短语。术语组:类似于文件夹,包含术语甚至其他术语组,以允许嵌套结构。如图所示,可以根据不同的业务场景创建相应的术语组及术语,比如:埋点、工具产品、留存、活跃、ARR、NRR等同时可以丰富完善这些术语,其构建逻辑、业务含义、计算逻辑、使用说明等,也可以添加相应实体最终沉淀为相应数据专辑image2024-7-31_10-46-7.png

关于数据资产沉淀部分,DataHub提供Domains和Glossary Terms来帮助用户沉淀数据资产,同时也可以对于各个实体打上各色标签,丰富doc说明,进一步完善数据资产沉淀,更多数据资产的沉淀案例还在积极地探索中。

4.总结与展望

4.1总结

DataHub目前已经上线了wip版本,录入了30W+物料,包括lms、Neverland、数栈、数据小站sql看板、标签平台等,包含采集侧、计算侧、应用侧较为核心链路的元数据。核心链路的元数据覆盖率达到80%,有效支撑数仓、数分等人员的初步使用,大大节省了下游用数、找数的人力和时间成本。

4.2展望

未来的规划主要在两个方面,新功能迭代、数据资产沉淀,进一步完善整个元数据系统建设。

①新功能迭代

  • 更为丰富的物料录入
  • “字段“级血缘
  • 访问行为数据(即热度数据)打通
  • 元数据实时更新设计
  • A->B任意链路血缘观测

②数据资产沉淀

  • 完善各域的数据资产沉淀