DataFusion 是一个为 Data Agent 提供数据支撑的工具平台。平台围绕 Data Agent 对数据发现、接入、开发、理解、治理和执行的需求,提供以下工具能力:
- 元数据管理:管理数据源、库表结构、字段及其元数据信息。
- 数据集成:通过 DataX、API、Spider 等插件接入和同步数据。
- 数据开发:提供 SQL 脚本开发、执行路由及开发任务管理能力。
- 数据资产:组织数据资产、血缘关系及相关外部系统信息。
- 数据治理:为数据标准化、数据关系探索和数据地图建设提供工具能力。
- 数据调度:管理任务定义、流程编排、触发器、运行实例、执行节点和插件化任务执行。
各模块的当前实现范围以代码和 docs/ 中的设计文档为准;Roadmap 中的能力表示后续建设方向,不代表当前已经完整交付。
| 阶段 | 目标 | 状态 |
|---|---|---|
| 元数据管理 | 数据源接入、库表字段同步、表结构查看 | 当前主线 |
| 数据调度 | 任务定义、流程 DAG、触发器、实例管理、Worker 注册与插件执行 | 当前主线 |
| 插件执行 | Shell、DataX、API、Spider、Flink K8S_OPERATOR、Spark K8S_OPERATOR | 按插件文档持续完善 |
| 数据集成 | DataX 任务生成、插件化运行、K8s 作业执行 | 进行中 |
| 实时/湖仓写入 | Kafka JSON 到 Paimon、Spark SQL 到 Paimon | 进行中 |
| 数据开发 | SQL 脚本、执行路由、开发态任务沉淀 | 规划中 |
| 数据资产和血缘 | 资产节点、血缘图谱、SkyWalking / OSS / Git 集成 | 规划中 |
| 数据治理增强 | 表级维度键探索、数据地图索引 | 规划中 |
| 平台化运维 | 多环境部署、插件发布、监控告警、权限边界 | 规划中 |
以下截图覆盖元数据接入、结构识别、调度编排和任务执行链路。点击图片可查看原始尺寸。
| 数据源连接配置 | 数据库表登记 |
|---|---|
![]() |
![]() |
| 表基础信息 | 字段结构 |
|---|---|
![]() |
![]() |
数据预览
| 流程管理 | DAG 流程编排 |
|---|---|
![]() |
![]() |
| 调度实例查询 | 执行节点管理 |
|---|---|
![]() |
![]() |
- 演示数据:持续维护一套可公开、可复现的元数据源和调度任务示例。
- API 文档入口:如果后续启用 OpenAPI / Knife4j,可以在 README 增加访问地址。
- 常见问题:Nacos 连接、数据库连接、Agent 注册失败、插件目录/PVC、K8s 权限不足。
部署资产与操作文档分离:
deploy/保存可执行脚本、环境文件、Compose 和 Kubernetes 清单。docs/deploy/保存部署步骤和配置说明。- 模块内保留 Dockerfile、Spring profile、前端环境文件和插件运行模板。
| 模式 | 后端 Profile | 配置来源 | 适用场景 | 详细说明 |
|---|---|---|---|---|
| Local | local |
application-local.yml、deploy/local/*.env |
开发调试、单机 jar 运行 | Local 部署 |
| Docker | local |
deploy/docker/compose.yml、deploy/docker/env/*.env |
PostgreSQL、Manager、Agent、Web 单机容器联调 | Docker 部署 |
| Kubernetes | dev、test、prod |
Nacos、Kustomize overlay、Kubernetes Secret | 多环境集群部署 | Kubernetes 部署 |
Local 和 Docker 当前均不依赖 Nacos。Kubernetes 中的 Manager、Agent 根据 overlay
设置 Spring profile,并从 Nacos 读取 datafusion-manager-{env} 与
datafusion-agent-{env}。
| 组件 | 建议版本 | 使用范围 |
|---|---|---|
| JDK | 17 | Local、后端构建 |
| Maven | 3.8+ | Local、Docker 镜像构建前的 jar 打包 |
| Node.js | 22+ | 前端开发和独立构建 |
| PostgreSQL | 16 或兼容版本 | Local、Docker 及 Manager 业务库 |
| Docker Compose | Compose v2 | Docker 模式 |
| Kubernetes、kubectl | 支持 Kustomize | Kubernetes 模式 |
| Nacos | 与当前 Spring Cloud Alibaba 配置兼容 | Kubernetes dev/test/prod |
| 业务环境 | 后端 Spring profile | 前端 Vite mode | Nacos |
|---|---|---|---|
local |
local |
development |
不使用 |
dev |
dev |
dev |
使用 |
test |
test |
test |
使用 |
prod |
prod |
production |
使用 |
前端不连接 Nacos。Vite 开发服务器通过 VITE_API_TARGET 代理 Manager,部署后的 Web
容器通过 Nginx 将同源 /api 转发到 Manager。
默认部署根目录为 /opt/datafusion。首次运行前需要准备 PostgreSQL、初始化数据库,并
核对 deploy/local/manager.env 与 deploy/local/agent.env 中标记为“必填”的参数。
个人密码和路径写入 Git 忽略的 manager.env.local、agent.env.local。
启动顺序为 Manager、Agent、Web:
./deploy/local/start-manager.sh
./deploy/local/start-agent.sh
cd datafusion-web
npm run devManager 和 Agent 脚本通过 nohup 后台运行,jar、日志、PID、插件和任务目录统一放在
/opt/datafusion。停止时先执行 stop-agent.sh,再执行 stop-manager.sh。详细的目录
权限、数据库初始化、纯 jar 运行和参数说明见 Local 部署。
Compose 包含 PostgreSQL 16、Manager、Agent 和 Web。Manager、Agent 使用 local
profile,数据库首次创建时自动执行 init_ddl.sql 和 init_data.sql。
mvn -DskipTests package -pl datafusion-manager,datafusion-agent -am
docker compose -f deploy/docker/compose.yml up --build -d| 服务 | 默认访问地址 |
|---|---|
| Web | http://127.0.0.1:8088 |
| Manager | http://127.0.0.1:8080 |
| Agent | http://127.0.0.1:8081 |
| PostgreSQL | 127.0.0.1:5432 |
端口通过 WEB_PORT、MANAGER_PORT、AGENT_PORT、POSTGRES_PORT 覆盖;应用参数位于
deploy/docker/env/manager.env 和 deploy/docker/env/agent.env。查看日志与停止服务:
docker compose -f deploy/docker/compose.yml logs -f
docker compose -f deploy/docker/compose.yml down详细说明见 Docker 部署。
Kubernetes 使用 Kustomize 组织:
base/:Manager、Agent、Web、RBAC、ConfigMap 和共享 PVC。overlays/dev|test|prod/:环境 profile、Nacos namespace 和环境入口。addons/:可选 Nacos、StorageClass、FileBrowser、Flink/Spark Operator。
部署前必须完成以下配置:
- 设置目标 overlay 的
DATAFUSION_ENV与NACOS_NAMESPACE。dev、prod namespace 当前留空;test 已配置现有测试集群 namespace。 - 创建
datafusion-secret。base/secret.yml未纳入 Kustomize,常规发布不会覆盖 集群凭据。 - 替换 Manager、Agent、Web 镜像,并确认
rook-cephfs-retain、Ingress 和 TLS。
以 test 环境为例:
# 首次部署且不使用外部 Secret 管理系统时,先填写该文件
kubectl apply -f deploy/k8s/base/secret.yml
kubectl kustomize deploy/k8s/overlays/test
kubectl apply -k deploy/k8s/overlays/test
kubectl -n datafusion get pods,svc,pvc,ingress集群已有同名 Secret 或使用外部 Secret 管理系统时,不执行第一条命令。详细顺序、 Agent 权限和可选组件见 Kubernetes 部署。
| DataFusion 环境 | 开发命令 | 构建命令 | Vite 环境文件 |
|---|---|---|---|
local |
npm run dev |
不单独发布 | .env、.env.development |
dev |
npm run dev:dev |
npm run build:dev |
.env.dev |
test |
npm run dev:test |
npm run build:test |
.env.test |
prod |
npm run dev:prod |
npm run build:prod |
.env.production |
.env 保存所有 mode 共享的默认值;.env.local 和 .env.*.local 只用于不提交的个人
覆盖。Docker 中的 Web 使用 build:prod 生成优化后的静态文件,但 Manager、Agent
仍使用 local profile。前端生产包请求同源 /api,容器到 Manager 的地址由
nginx.conf 管理。
DataFusion 采用 Maven 多模块结构。公共能力、调度框架、运行时应用和插件模块保持独立,当前目录及职责如下:
datafusion/
├── datafusion-common-data 跨模块共享 DTO、枚举和领域模型
│ └── com.datafusion/
│ ├── common 通用共享对象
│ └── scheduler 调度通信模型和枚举
├── datafusion-common 轻量级公共工具、类型系统和通用异常
├── datafusion-common-spring Spring/Web、分页、基础实体和类型处理器
├── datafusion-datasource 数据源、连接器、SQL 执行和结果集映射
├── datafusion-scheduler-master 调度 Master 核心框架
├── datafusion-scheduler-worker 调度 Worker 契约和执行框架
├── datafusion-manager 管理端后端与调度运行时
│ └── com.datafusion.manager/
│ ├── metadata 元数据管理
│ ├── ingestion 数据集成
│ ├── development 数据开发
│ ├── asset 数据资产与血缘
│ ├── scheduler 调度管理
│ ├── system 系统管理
│ ├── auth 认证相关对象
│ ├── config 应用配置
│ └── utils Manager 通用工具
├── datafusion-web React 管理端前端
├── datafusion-agent Worker 运行时、插件加载和任务执行
└── datafusion-plugin 插件父模块
├── datafusion-plugin-api API 抽数插件及公共插件契约
├── datafusion-plugin-datax DataX 运行资源和任务模板
├── datafusion-plugin-flink-table Flink Table 到 Paimon 插件
├── datafusion-plugin-spider 外部 Spider 运行时资源插件
└── datafusion-plugin-spark-sql Spark SQL 到 Paimon 插件
Manager 各业务域通常按 controller、service、service.impl、dao、po、dto、vo、model、enums、constant 分层;只创建业务实际需要的层级。
下图表示当前 POM 中的直接 Maven 依赖和主要运行时调用。箭头由使用方指向被依赖模块,模块框内列出直接依赖,便于在缩放后继续阅读。
图源:datafusion-module-dependencies.html。模块或 POM 依赖变化时,应先更新图源并重新生成图片。
datafusion-plugin 是插件聚合父模块,不表示运行时依赖。datafusion-web 不参与 Java 编译依赖,通过 /api 调用 Manager;Agent 通过内部调度接口向 Manager 注册、发送心跳、拉取任务并上报执行结果。
Java 根包统一使用 com.datafusion,领域对象放在所属模块和业务域下,类路径与模块职责保持一致。
| 包名 | 职责 |
|---|---|
com.datafusion.***.controller |
HTTP 接口和请求校验,不承载业务规则 |
com.datafusion.***.service |
业务接口、规则、事务边界和跨服务编排 |
com.datafusion.***.service.impl |
Service 实现 |
com.datafusion.***.dao |
数据访问接口,通常与持久化对象对应 |
com.datafusion.***.po |
持久化对象,通常与数据库表结构对应 |
com.datafusion.***.dto |
接口和模块间传输对象 |
com.datafusion.***.vo |
面向页面展示的组合对象,仅在 DTO 不能直接表达时使用 |
com.datafusion.***.model |
框架或领域内部模型 |
com.datafusion.***.constant |
常量定义 |
com.datafusion.***.enums |
枚举定义 |
分层规则:
- Controller 按业务接口边界组织,多个页面可以复用同一 Controller;单个页面优先对接一个主 Controller,跨领域能力由 Service 编排。
- Service 与业务能力分类保持一致,跨业务调用优先依赖其他 Service,不在 Controller 中直接编排 Mapper 或外部系统。
- DAO 与持久化对象、数据库结构保持对应关系,自定义 SQL 必须使用参数绑定。
datafusion-common-data只下沉确实需要跨模块共享的对象,避免把单一运行时模块的内部模型扩散为公共契约。
项目使用结构化设计文档约定:
- 项目索引:docs/.sdd/project-index.yml
- 项目约定:docs/.sdd/project-conventions.md
- 数据结构事实源:
*-data-define.md - 行为和流程设计:
*-design.md
新增或修改功能时,先更新对应 data / design 文档,再改代码。外部运行时或资源引入型插件可以按索引中的 design_only 例外只保留 design 文档。
- Java 使用 JDK 17。
- Controller 返回
Result<T>,保持薄控制层。 - Service 负责业务规则、事务边界、状态变化和外部集成编排。
- Mapper 通常继承 MyBatis-Plus
BaseMapper<Entity>。 - 新增 JSON / Properties 字段时优先复用已有 MyBatis 类型处理器。
- 自定义 SQL 使用
#{}绑定用户输入,禁止用${}拼接用户输入。
- 前端源码位于
datafusion-web/src。 - 技术栈:Vite、React、TypeScript、Ant Design、Axios、React Query、React Router。
- 页面模块优先放在
datafusion-web/src/modules/{feature}。 - 模块常见文件:
api.ts、dto.ts、constants.ts、index.tsx、components/。 - 统一 HTTP client:
datafusion-web/src/api/http.ts。 - 路由集中维护:
datafusion-web/src/router/routes.tsx。
mvn -DskipTests compile
mvn -DskipTests compile -pl datafusion-manager -am
mvn -DskipTests compile -pl datafusion-agent -amcd datafusion-web
npm run build
npm run lint
npm run test| 模块 | 说明 | 文档 |
|---|---|---|
datafusion-common-data |
跨模块共享 DTO、枚举和领域模型 | 无 |
datafusion-common |
公共工具、类型系统、cron、SQL 模板、通用异常 | docs/datafusion-common |
datafusion-common-spring |
Spring/Web DTO、分页对象、基础实体、MyBatis 类型处理器 | 无 |
datafusion-datasource |
动态数据源、连接器、SQL 执行、结果集映射 | 无 |
datafusion-manager |
主 Spring Boot 后端,包含 metadata、scheduler、system 等域 | docs/datafusion-manager |
datafusion-web |
管理端前端应用 | docs/datafusion-manager |
datafusion-scheduler-master |
调度 master 框架层 | docs/datafusion-scheduler-master |
datafusion-scheduler-worker |
调度 worker 框架层 | docs/datafusion-scheduler-worker |
datafusion-agent |
Worker 运行时应用层,负责注册、插件加载、任务执行和日志 | docs/datafusion-agent |
datafusion-plugin |
插件父模块 | docs/datafusion-plugin |
datafusion-plugin-api |
API 抽数插件 | docs/datafusion-plugin/datafusion-plugin-api |
datafusion-plugin-datax |
DataX 插件资源与任务模板 | 无 |
datafusion-plugin-flink-table |
Kafka JSON 到 Paimon 的 Flink 插件 | docs/datafusion-plugin/datafusion-plugin-flink-table |
datafusion-plugin-spider |
外部 Spider 运行时资源引入插件 | docs/datafusion-plugin/datafusion-plugin-spider |
datafusion-plugin-spark-sql |
Spark SQL 到 Paimon 插件 | docs/datafusion-plugin/datafusion-plugin-spark-sql |









