每天认识一个组件:元数据平台 DataHub

文章来源声明: 原文作者:大大大大晴天; 来源站点:掘金; 原文链接:https://juejin.cn/post/7685261384757624875; 本文基于上述来源整理/加工,觅优补充点评,仅供技术学习交流。版权归原作者所有。
觅优短评

DataHub 把元数据做成可建模、可订阅、可治理的生产级资产,价值在跨系统发现、血缘与自动治理。适合数据栈复杂、平台工程能力较强的团队分阶段落地。

一、DataHub 出现的背景 ---------------

传统的数据目录通常解决的是“登记”和“搜索”问题:有哪些表、有哪些字段、谁创建的、文档在哪里。随着数据平台规模扩大,仅靠静态目录会遇到几个明显瓶颈。

第一,数据资产数量增长很快。一个企业可能同时使用 Hive、Iceberg、Snowflake、BigQuery、Kafka、dbt、Airflow、Spark、Tableau、Looker、Superset 等工具。

第二,数据上下文变化很快。字段新增、表废弃、owner 变更、任务依赖调整、指标口径更新、质量状态波动,都是高频事件。如果目录系统只能靠人工维护,很快就会失真。

第三,数据治理从“文档治理”转向“运行时治理”。例如,当某个公开数据集新增了 PII 字段,治理系统最好能实时感知并触发访问控制或审查流程。

二、DataHub 的核心定位

DataHub 是一个面向现代数据栈的开源元数据平台,支持 Data Discovery、Collaboration、Governance 和 end-to-end Observability,并采用 model-first 的理念,以便在不同工具和系统之间释放互操作能力 。因此,DataHub 的定位更接近“元数据中枢”,而不是单纯的数据目录页面。

可以把 DataHub 理解为三层能力的组合:

层次解决的问题DataHub 中的体现
数据资产目录数据在哪里、叫什么、怎么搜索Dataset、Dashboard、Chart、Data Job、Data Flow 等实体
元数据图谱资产之间是什么关系Entity、Aspect、Relationship、URN、血缘
治理与自动化如何让元数据参与实际管理流程标签、术语、Owner、Domain、Policy、Actions、事件订阅

DataHub 的关键思想是:把元数据当作可建模、可查询、可订阅、可治理的生产级数据,而不是附属文档。

三、架构原理

DataHub 的整体架构可以概括为:数据源通过采集框架或 SDK 产生元数据变更,元数据服务写入存储,并通过 Kafka 事件驱动搜索索引、图索引、动作框架和外部订阅系统更新。

                <span>+</span><span>-----------------------------+</span>
                <span>|</span>        数据源与工具生态       <span>|</span>
                <span>|</span><span>-----------------------------|</span>
                <span>|</span> DB <span>/</span> Lake <span>/</span> Warehouse       <span>|</span>
                <span>|</span> BI <span>/</span> Dashboard <span>/</span> Chart      <span>|</span>
                <span>|</span> dbt <span>/</span> Airflow <span>/</span> Spark       <span>|</span>
                <span>|</span> Kafka <span>/</span> ML <span>/</span> Quality Tools  <span>|</span>
                <span>+</span><span>--------------+--------------+</span>
                               <span>|</span>
                               <span>|</span> Pull <span>/</span> Push
                               v
<span>+</span><span>------------------+    +------+-------+     +------------------+</span>
<span>|</span> CLI <span>/</span> YAML Recipe<span>|</span>    <span>|</span> SDK <span>/</span> API    <span>|</span>     <span>|</span> UI Ingestion     <span>|</span>
<span>|</span> 批式采集          <span>|</span>    <span>|</span> 程序化写入    <span>|</span>     <span>|</span> 页面配置采集       <span>|</span>
<span>+</span><span>--------+---------+    +------+-------+     +---------+--------+</span>
         <span>|</span>                     <span>|</span>                       <span>|</span>
         <span>+</span><span>---------------------+-----------------------+</span>
                               <span>|</span>
                               v
                  <span>+</span><span>------------+-------------+</span>
                  <span>|</span> Metadata Service <span>/</span> GMS   <span>|</span>
                  <span>|</span> 元数据写入、校验、查询      <span>|</span>
                  <span>+</span><span>------+-----------+-------+</span>
                         <span>|</span>           <span>|</span>
                         <span>|</span>           <span>|</span>
              <span>+</span><span>----------v--+     +--v----------------+</span>
              <span>|</span> Metadata DB <span>|</span>     <span>|</span> Kafka Metadata    <span>|</span>
              <span>|</span> 持久化 Aspect<span>|</span>     <span>|</span> Events            <span>|</span>
              <span>+</span><span>-------------+     +--+----------------+</span>
                                    <span>|</span>
                                    v
                 <span>+</span><span>------------------+------------------+</span>
                 <span>|</span> <span>Search</span> Index <span>/</span> Graph Index <span>/</span> Actions <span>|</span>
                 <span>|</span> 搜索、关系遍历、血缘、自动化响应       <span>|</span>
                 <span>+</span><span>------------------+------------------+</span>
                                    <span>|</span>
                                    v
                      <span>+</span><span>-------------+-------------+</span>
                      <span>|</span> Web UI <span>/</span> GraphQL <span>/</span> REST   <span>|</span>
                      <span>|</span> 搜索、治理、血缘、集成调用   <span>|</span>
                      <span>+</span><span>---------------------------+</span>

1.元数据模型

DataHub 采用 schema-first 的元数据建模方式,它使用 LinkedIn 的 Pegasus schema language,也就是 PDL,并扩展了一组注解来建模元数据;存储、服务、索引和采集层都直接建立在这个元数据模型之上,从客户端到存储层保持强类型 。

它的模型可以用四个关键词理解:Entity、Aspect、Relationship、URN。

其中:

概念含义示例
Entity元数据图谱中的主节点Dataset、Chart、Dashboard、CorpUser、DataJob
Aspect描述 Entity 某个侧面的属性集合,也是 DataHub 中最小的原子写入单位ownership、globalTags、glossaryTerms、status
Relationship两个 Entity 之间的命名边,可以双向遍历OwnedBy、Contains
URNEntity 的字符串化唯一标识urn:li:dataset:(...)

Aspect 是 DataHub 中最小的原子写入单位,多个 Aspect 可以独立更新;Relationship 通过 Aspect 中的外键属性和 @Relationship 注解声明,并支持双向遍历 。

2.事件机制

DataHub 的实时性主要依赖元数据事件:Metadata Change Proposal、Metadata Change Log、Platform Event 等,这些事件最初使用 PDL 定义,并转换为 Avro 后写入或读取 Kafka。典型链路如下:

Metadata Change Proposal 可以理解为“请求变更某个 Entity 的某个 Aspect”;Metadata Change Log 表示已经写入元数据图谱的变更;Platform Event 则表示 DataHub 在业务逻辑层产生的事件,例如 Entity Change Event。这套事件模型让 DataHub 不只是保存元数据,还能把元数据变化传播给搜索、图谱、自动化和外部系统。

3.采集方式

DataHub 的采集方式可以用 Pull 和 Push 两类理解。

Pull-based 集成适合周期性扫描已有系统,例如 Snowflake、BigQuery、dbt、Looker、Airflow 等;Push-based 集成适合在代码运行过程中主动上报元数据,例如通过 Python SDK、Java SDK、Spark、Great Expectations 等方式写入 。

常见落地路线是:先用 CLI + YAML recipe 接入核心数仓和调度系统,再逐步通过 SDK 将自研平台、数据质量结果、指标平台和审批流程中的元数据写入 DataHub。

四、功能特性

DataHub 的功能可以分为数据发现、血缘分析、治理协作、采集集成、API 与自动化几类。

功能说明价值
数据搜索与发现在统一目录中搜索 Dataset、Dashboard、Chart 等资产快速定位数据资产,减少重复建表和口径误用
元数据采集支持从数据库、数仓、BI、调度、流系统等采集元数据让平台资产自动进入目录
血缘分析支持上游和下游依赖分析评估变更影响,辅助故障定位
Owner 与文档为资产维护负责人、说明、链接、机构记忆等降低跨团队沟通成本
标签与术语支持 Tags、Glossary Terms 等治理语义标识敏感字段、核心指标、业务主题
API 与 SDK支持 GraphQL、OpenAPI、Python SDK、Java SDK、CLI方便与平台工程、CI/CD、数据治理流程集成
事件订阅基于元数据事件驱动外部动作构建自动治理、通知、审计和质量联动

DataHub 的 ingestion framework 和 CLI 可从 50+ 数据源拉取元数据,也可以通过 Python 或 Java SDK 将元数据从自有管道和应用中推送到目录;采集方式包括 CLI + YAML recipe、Python SDK、Java SDK 和 UI Ingestion 。

DataHub 的优势不在于某一个单点功能,而在于它把数据发现、元数据建模、血缘、治理和事件机制放在同一个体系中。

  • 模型清晰:Entity、Aspect、Relationship 和 URN 让 DataHub 能够表达复杂数据资产及其关系。相比只存表名、字段名和描述的目录系统,这种图谱模型更适合表达“表由哪个任务产出”“报表依赖哪些数据集”“字段属于哪个业务术语”等关系。
  • 实时性较好:DataHub 是 stream-oriented,元数据变化可以在数秒内反映到平台中,也可以被外部系统订阅 。这让它适合承载访问控制联动、敏感字段发现、质量告警传播、变更影响通知等场景。
  • 集成面广:支持 Snowflake、BigQuery、Redshift、dbt、Databricks、Looker、Tableau、Power BI、Airflow、Spark、Kafka、PostgreSQL、MySQL、Hive、Glue、S3、Iceberg、Unity Catalog 等来源 ,这对异构大数据平台尤其重要。
  • 面向工程化:DataHub 支持 CLI、GraphQL、OpenAPI、Python SDK、Java SDK 等接口,这意味着它不是只能靠 UI 人工维护,而是可以纳入平台工程体系。

五、适用场景

DataHub 适合数据资产复杂、团队协作频繁、治理要求较高的组织。尤其是当数据平台已经从单一 Hive 或数仓演进到湖仓、BI、调度、质量、指标、机器学习并存时,DataHub 的价值会更明显。

场景DataHub 的作用
数据资产盘点汇总多个系统中的表、视图、文件、Topic、报表、任务
数据血缘治理分析表、字段、任务、报表之间的上下游关系
变更影响分析修改字段、下线表、调整任务前识别受影响对象
数据治理标注 Owner、标签、术语、Domain、敏感信息
数据质量联动把质量结果、Profile、运行状态写入资产上下文
平台自助服务让业务和分析人员通过搜索、文档、血缘自行理解数据
AI 数据上下文为 AI Agent 提供可信的数据目录、字段、血缘和语义上下文

但 DataHub 不一定适合所有团队。如果团队规模较小、数据源单一、资产数量有限,并且主要痛点只是“写几份表说明”,那么直接维护轻量文档或数仓内置 Catalog 可能成本更低。

六、部署使用

DataHub 部署支持 Self-hosted via Docker、Kubernetes Helm,其中 Docker 适合开发和小团队,Kubernetes Helm 推荐用于生产级自托管部署 。

本地体验最常见的方式是 Docker Quickstart:

<span># macOS / Linux</span>
brew install datahub-project/tap/datahub

<span># 或使用 pip</span>
python3 -m pip install --upgrade acryl-datahub

<span># 启动本地 DataHub</span>
datahub docker quickstart

启动后,可通过http://localhost:9002访问 DataHub Web 应用,默认账号密码为datahub / datahub

一个典型的 Snowflake 采集 recipe 形态如下:

<span>source:</span>
  <span>type:</span> <span>snowflake</span>
  <span>config:</span>
    <span>account_id:</span> <span>my_account</span>
    <span>username:</span> <span>my_user</span>
    <span>password:</span> <span>my_password</span>
    <span>role:</span> <span>DATAHUB_ROLE</span>
    <span>warehouse:</span> <span>COMPUTE_WH</span>

<span>sink:</span>
  <span>type:</span> <span>datahub-rest</span>
  <span>config:</span>
    <span>server:</span> <span>http://localhost:8080</span>

执行采集:

datahub ingest <span>-</span><span>c</span> snowflake_recipe.yml

除了 CLI + YAML recipe,DataHub 还支持 Python SDK、Java SDK 和 UI Ingestion;其中 UI Ingestion 可在 DataHub UI 的 Ingestion 页面配置并运行。

七、工程落地建议

建议不要一开始就把 DataHub 当作“全量治理平台”推进,而是从高价值资产入手。

第一阶段可以接入核心数仓、调度系统和 BI 系统。目标是让用户能查到表、字段、负责人、文档和基础血缘。

第二阶段可以接入 dbt、数据质量平台、指标平台和权限系统。目标是让 DataHub 从“能搜”变成“可信”。

第三阶段可以基于事件和 API 做自动化治理。例如,当高价值表缺失 Owner、核心字段缺少描述、敏感字段进入公开数据集、下游报表依赖废弃表时,自动触发提醒、审批或修复流程。

一个较稳妥的路线如下:

阶段 <span>1</span>:资产可见
数据源接入 <span>-></span> 表字段采集 <span>-></span> Owner/描述补齐 <span>-></span> 搜索可用

阶段 <span>2</span>:关系可信
调度接入 <span>-></span> dbt 接入 <span>-></span> BI 接入 <span>-></span> 血缘可用

阶段 <span>3</span>:治理联动
标签/术语 <span>-></span> 质量结果 <span>-></span> 事件订阅 <span>-></span> 自动化动作

阶段 <span>4</span>:平台化
API 集成 <span>-></span> 自研系统写入 <span>-></span> AI Agent 使用元数据上下文