DataHub 架构设计与核心工作原理
1. 整体架构设计
DataHub 是一个第三代数据目录系统,专为现代数据栈设计,支持数据发现、协作、治理和端到端可观测性。其架构采用模型优先的设计理念,注重不同工具和系统之间的互操作性。
1.1 架构总览
DataHub 的整体架构可以分为以下几个主要层次:
- 前端层:React 实现的 Web UI 和 Play Framework 实现的前端服务
- API 层:GraphQL API 和 REST API
- 服务层:元数据服务 (Metadata Service)
- 存储层:文档存储 (MySQL/PostgreSQL)、搜索索引 (Elasticsearch) 和图索引 (Neo4j/MySQL)
- 事件层:基于 Kafka 的元数据事件流
- 摄取层:Python 实现的元数据摄取框架
1.2 架构亮点
DataHub 架构的三个主要亮点:
-
Schema-first 元数据建模:使用序列化无关的语言 (PDL) 描述元数据模型,支持 REST 和 GraphQL API,以及基于 AVRO 的 Kafka 事件通信。
-
基于流的实时元数据管理平台:元数据基础设施采用流式设计,使元数据变更能在几秒内反映到平台中,并允许订阅元数据变更事件。
-
联邦式元数据服务:支持由不同团队拥有和运营的联邦元数据服务,通过 Kafka 与中央搜索索引和图进行通信,支持全局搜索和发现。
2. 核心组件工作原理
2.1 元数据存储 (Metadata Store)
元数据存储负责存储构成元数据图的实体 (Entities) 和方面 (Aspects),提供 API 用于摄取元数据、按主键获取元数据、搜索实体和获取实体间关系。
技术实现:
- Spring Java 服务托管一组 Rest.li API 端点
- MySQL 作为主要存储
- Elasticsearch 用于搜索索引
- Kafka 用于事件流通信
主要功能:
- 元数据的 CRUD 操作
- 主键查询
- 全文搜索
- 关系查询(如血缘关系)