
飞熊深度向 · 数据更新于 2026-08-17 · 一句话理解:Marquez 是 OpenLineage 标准的官方参考实现——一个 PostgreSQL + Java 17 的纯血缘后端,提供 REST + GraphQL API + Web UI。它 不做 catalog、不做质量、只做一件事:把 OpenLineage 事件变成可视化的 lineage graph。
1. 为什么需要 ” 参考实现 ”
OpenLineage 定义了血缘事件 schema(spec + Facet),但只发事件不够——总得有人接事件、存起来、画图。
这就是 Marquez 的角色:OpenLineage 的官方参考后端。它:
- 接收 OpenLineage 事件(HTTP/Kafka)
- 存到 PostgreSQL
- 提供 REST + GraphQL API 查询
- 提供 Web UI 可视化血缘图
- 提供 admin API + 健康检查 + Prometheus metrics
LF AI & Data Foundation 已正式接纳为 Graduated 项目(注意:Marquez 比 OpenLineage 更早毕业)—— 由 WeWork 开源贡献给基金会。
2. 关键数据(2026-08-17 GitHub API 实时)
| 维度 | 数值 |
|---|---|
| Stars | 2,259 ⭐ |
| Forks | 408 |
| Open Issues | 249 |
| License | Apache-2.0 ✅ |
| 首次提交 | 2018-07(WeWork 内部项目) |
| 公开开源 | 2021(加入 LF AI & Data) |
| 出身 | WeWork(2017 内部项目,2018 开 repo,2021 加入 LF AI) |
| 当前版本 | Marquez 0.50.0 / OpenLineage 2-0-2(2024-10-23) |
| 最近 commit | 2026-08-11 |
| 架构栈 | Java 17 + PostgreSQL 14 + TypeScript (Web UI) |
| LF 状态 | Graduated(2023 年,比 OpenLineage 早毕业) |
OpenLineage org 下与 Marquez 并列——两个项目同属 LF AI & Data 治理,一起毕业,一起演化。
3. Marquez 是什么:4 模块架构
┌──────────────────────────────────────────────┐
│ Marquez Repository (monorepo) │
├──────────────────────────────────────────────┤
│ │
│ api/ ─→ Java 17 REST API + OpenLineage 接 │
│ 收端 + PostgreSQL 持久化 │
│ │
│ web/ ─→ TypeScript Web UI(端口 3000)│
│ 提供 lineage graph 可视化 │
│ │
│ clients/ ─→ 多语言客户端(Python / etc.)│
│ 实现 HTTP API 封装 │
│ │
│ chart/ ─→ Helm Chart(K8s 部署)│
│ │
└──────────────────────────────────────────────┘
3.1 API 模块(核心)
核心职责:
– 监听 OpenLineage 事件(HTTP POST /api/v1/lineage)
– 解析事件,写入 PostgreSQL
– 提供查询 API(namespace/job/run/dataset/event)
– 提供 admin API(healthcheck、metrics)
端口分配:
–
5000 —— 业务 HTTP API
–
5001 —— Admin API(健康检查、Prometheus metrics)
– MacOS 用户注意:5000 已被 AirPlay 占用,需要
--api-port 9000 改端口
3.2 Web 模块(可视化)
核心功能:
– 血缘图(Lineage Graph)—— 展示 job 与 dataset 之间的输入输出关系
– Namespace / Job / Dataset / Run 详情页
– 作业执行历史
– 性能 metrics 展示
端口 3000,打开 http://localhost:3000 即可探索。
3.3 Clients 模块
提供多语言 HTTP API 封装:
- Python 客户端(最常用)
- 其他语言按需扩展
3.4 Chart 模块
Helm Chart,提供 K8s 一键部署。
4. 核心数据模型
Marquez 的数据模型 完全对齐 OpenLineage,因为它就是 OpenLineage 事件的接收端:
4.1 Namespace
{
"namespace": {
"name": "production",
"currentSource": {
"type": "POSTGRESQL",
"name": "postgres://prod",
"connectionUrl": "jdbc:postgresql://..."
},
"description": "Production data sources",
"owners": [{"name": "data-team"}],
"tags": ["production", "pci"]
}
}
Namespace = 数据源命名空间(如 production、staging),是 Marquez 顶层组织单位。
4.2 Job
{
"job": {
"namespace": "production",
"name": "etl_orders.daily",
"type": "BATCH",
"inputs": [{ "namespace": "production", "name": "raw.orders"}
],
"outputs": [{ "namespace": "production", "name": "analytics.daily_orders"}
],
"location": "https://github.com/company/airflow-dags/blob/main/etl_orders.py",
"description": "Daily ETL pipeline",
"owners": [{"name": "data-eng"}]
}
}
Job = 一个调度单元(如一个 Airflow DAG / Spark 任务 / dbt model),记录它消费什么、生产什么。
4.3 Run
{
"run": {
"id": "abc-123-def",
"namespace": "production",
"name": "etl_orders.daily",
"state": "COMPLETED",
"startedAt": "2026-08-17T01:00:00Z",
"endedAt": "2026-08-17T01:05:00Z",
"durationMs": 300000
}
}
Run = Job 的一个具体运行,记录状态、耗时、参数。
4.4 Dataset
{
"dataset": {
"namespace": "production",
"name": "analytics.daily_orders",
"type": "DB_TABLE",
"physicalName": "analytics.daily_orders",
"description": "Daily aggregated orders",
"columns": [{ "name": "order_id", "type": "BIGINT"},
{"name": "amount", "type": "NUMERIC"},
{"name": "created_at", "type": "TIMESTAMP"}
],
"tags": ["analytics", "gold"],
"lastModifiedAt": "2026-08-17T01:05:00Z"
}
}
Dataset = 一份数据,记录 schema、tag、最后修改时间。
4.5 Event(OpenLineage 标准)
{
"eventType": "COMPLETE",
"eventTime": "2026-08-17T01:05:00Z",
"run": {"runId": "abc-123"},
"job": {"namespace": "...", "name": "..."},
"inputs": [...],
"outputs": [...],
"producer": "airflow",
"schemaURL": "https://openlineage.io/spec/2-0-2/OpenLineage.json"
}
Event = OpenLineage 事件的 payload,Marquez 原样接收并解析。
5. Web UI 三大核心视图
5.1 Lineage Graph(血缘图)
打开 Web UI 主界面,默认是 lineage graph 视图,展示:
–
节点:Job(蓝色)+ Dataset(绿色)
–
边:consumes / produces 关系
–
过滤:可按 namespace / tag 过滤
适合 快速理解数据流的来龙去脉。
5.2 Job Detail(任务详情)
点击任一 Job,进入详情页:
– 基本信息(namespace / name / type / owners)
– 输入输出 datasets
– 运行历史(runs)
– 最新一次 run 的状态、耗时、参数
适合 排查具体任务的执行问题。
5.3 Dataset Detail(数据集详情)
点击任一 Dataset,进入详情页:
– 基本信息(type / physicalName / schema)
– 上下游 jobs
– tag / description / owners
– 列级 schema(Marquez 通过 OpenLineage columnLineage facet 支持)
适合 理解数据集的来源和使用。
6. 与 DataHub / OpenMetadata / Atlas 对比
| 维度 | Marquez | DataHub | OpenMetadata | Atlas |
|---|---|---|---|---|
| 核心定位 | 纯血缘后端 | 一站式 catalog | 一站式 + AI | Hadoop 元数据 |
| Stars | 2,259 ⭐ | 12,534 ⭐ | 14,891 ⭐ | 2,132 ⭐ |
| License | Apache-2.0 ✅ | Apache-2.0 ✅ | Apache-2.0 ✅ | Apache-2.0 ✅ |
| LF 状态 | Graduated | 独立 +LinkedIn | LF 候选 | Apache 顶级 |
| 血缘 | ✅ 表 + 列级 | ✅ 表 + 列级 | ✅ 表 + 列级 | ✅ 表级 |
| 元数据 | ❌ | ✅ | ✅ | ✅ |
| 数据质量 | ❌ | ✅ | ✅ | ⚠️ 弱 |
| 数据契约 | ❌ | ⚠️ | ✅ ODCS | ❌ |
| AI 上下文 | ❌ | ✅ MCP | ✅ MCP | ❌ |
| 架构 | Java + PG | Java + Kafka | Java + ES | Java + HBase + Solr |
| OpenLineage 集成 | ✅ 官方参考 | ✅ 消费事件 | ✅ 消费事件 | ⚠️ 自家 |
| 部署复杂度 | 🟢 极简 | 🟡 中等 | 🟡 中等 | 🔴 重 |
6.1 互补关系
Marquez + 其他 catalog:
Pipeline Tools (Spark/Airflow/dbt)
↓ 发射 OpenLineage 事件
OpenLineage 标准
↓
双路:① Marquez(纯血缘视图)+ ② DataHub/OpenMetadata(一站式)
关键洞察 :Marquez 不是 DataHub 的替代品, 它是 DataHub 的简化版替代。当团队只需要血缘图、不需要 catalog/ 质量 /AI 上下文时,Marquez 是更轻量的选择。
7. 部署模式
7.1 Docker Compose(开发)
git clone https://github.com/MarquezProject/marquez
cd marquez
./docker/up.sh
# Web UI: http://localhost:3000
# HTTP API: http://localhost:5000
# Admin: http://localhost:5001
7.2 完整集成(Marque + OpenLineage Airflow)
# 1. 启动 Marquez
./docker/up.sh
# 2. 配置 Airflow 发射 OpenLineage 事件
export OPENLINEAGE_URL=http://localhost:5000
export OPENLINEAGE_API_KEY=***
export OPENLINEAGE_NAMESPACE=production
# 3. Airflow 启动后,Marquez 自动接收事件
7.3 Kubernetes(生产)
helm repo add marquez https://marquezproject.github.io/marquez
helm install marquez marquez/marquez \
--set postgresql.auth.password=secret \
--namespace marquez --create-namespace
7.4 启动选项
# 使用 --build 从源码构建
./docker/up.sh --build
# 使用 --seed 注入样例数据
./docker/up.sh --seed
# MacOS 用户改端口
./docker/up.sh --api-port 9000
8. 版本兼容策略
Marquez 与 OpenLineage 是 独立版本号但严格兼容:
| Marquez 版本 | OpenLineage Spec | 状态 |
|---|---|---|
| UNRELEASED | 2-0-2 | CURRENT(开发中) |
| 0.50.0(2024-10-23) | 2-0-2 | RECOMMENDED |
| 0.49.0(2024-08-07) | 2-0-2 | MAINTENANCE |
兼容性保证:
– Marquez 向后兼容 OpenLineage spec
– 旧 spec 版本的事件也能被新 Marquez 接收
–
openlineage-python / openlineage-java 客户端库版本可以比 spec 高
9. 实战 3 步:用 Marquez 收集 Airflow 血缘
Step 1: 启动 Marquez
cd marquez && ./docker/up.sh --seed
# seed 模式会注入样例数据集,方便探索 UI
Step 2: 配置 Airflow
pip install openlineage-airflow
export OPENLINEAGE_URL=http://marquez:5000
export OPENLINEAGE_API_KEY=***
export OPENLINEAGE_NAMESPACE=production
或者在 Airflow config:
[openlineage]
transport = {
"type": "http",
"url": "http://marquez:5000",
"auth": {"type": "api_key", "api_key": "***"}
}
Step 3: 验证
打开 http://localhost:3000,查看 lineage graph 自动生成。
10. 总结:飞熊为什么关心 Marquez
10.1 关键事实
- Apache-2.0 + LF AI & Data Graduated —— 比 OpenLineage 早毕业
- WeWork 出身(2017 内部项目 → 2021 开源 → 2023 LF 毕业)
- 纯血缘后端——不做 catalog、不做质量、只做血缘可视化
- Java 17 + PostgreSQL 14 —— 架构简单,部署门槛低
- OpenLineage 官方参考实现——所有 OpenLineage 集成(Spark/dbt/Airflow/Flink)都开箱即用
10.2 选型决策
| 痛点 | 首选 | 备选 |
|---|---|---|
| 只要血缘图,不要 catalog | Marquez | DataHub |
| 要 catalog + 血缘 + 质量 | DataHub + OpenLineage | OpenMetadata + OpenLineage |
| 已经有 DataHub | DataHub + OpenLineage | – |
| 已经有 OpenMetadata | OpenMetadata + OpenLineage | – |
| Hadoop 老仓库 | Apache Atlas | – |
| K8s 生产部署 | Marquez + Helm Chart | Docker Compose |
10.3 License
| 项目 | License | 商用风险 |
|---|---|---|
| Marquez | Apache-2.0 | ✅ 无风险 |
飞熊专属观察 :Marquez 是数据治理赛道 最轻量的 Apache-2.0 血缘后端。如果你不想上 DataHub/OpenMetadata 的重量级 catalog,Marquez 是最干净的 ” 血缘图可视化 ” 选择。
📎 参考
- GitHub: MarquezProject/marquez
- 官网: marquezproject.ai
- Quickstart: marquezproject.github.io/marquez/docs/quickstart.html
- LF AI & Data: lfaidata.foundation/projects/marquez
- 已有 WP 调研: 《OpenLineage 调研》 · 《数据治理横评》
本文数据基准 2026-08-17(GitHub API + 官网 + LF AI & Data 官网实时抓取)。如需引用: [《Marquez 调研》](https://east196.cn/?p=361)