Skip to content

Repository files navigation

DataFusion

DataFusion 是一个为 Data Agent 提供数据支撑的工具平台。平台围绕 Data Agent 对数据发现、接入、开发、理解、治理和执行的需求,提供以下工具能力:

  • 元数据管理:管理数据源、库表结构、字段及其元数据信息。
  • 数据集成:通过 DataX、API、Spider 等插件接入和同步数据。
  • 数据开发:提供 SQL 脚本开发、执行路由及开发任务管理能力。
  • 数据资产:组织数据资产、血缘关系及相关外部系统信息。
  • 数据治理:为数据标准化、数据关系探索和数据地图建设提供工具能力。
  • 数据调度:管理任务定义、流程编排、触发器、运行实例、执行节点和插件化任务执行。

各模块的当前实现范围以代码和 docs/ 中的设计文档为准;Roadmap 中的能力表示后续建设方向,不代表当前已经完整交付。

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 集成 规划中
数据治理增强 表级维度键探索、数据地图索引 规划中
平台化运维 多环境部署、插件发布、监控告警、权限边界 规划中

系统截图

以下截图覆盖元数据接入、结构识别、调度编排和任务执行链路。点击图片可查看原始尺寸。

元数据管理

数据源连接配置 数据库表登记
DataFusion 数据源连接配置 DataFusion 数据库表登记
表基础信息 字段结构
DataFusion 元数据表基础信息 DataFusion 元数据字段结构

数据预览

DataFusion 元数据表数据预览

数据调度与执行

流程管理 DAG 流程编排
DataFusion 调度流程管理 DataFusion DAG 流程编排
调度实例查询 执行节点管理
DataFusion 调度实例查询 DataFusion 执行节点管理

后续文档计划

  • 演示数据:持续维护一套可公开、可复现的元数据源和调度任务示例。
  • API 文档入口:如果后续启用 OpenAPI / Knife4j,可以在 README 增加访问地址。
  • 常见问题:Nacos 连接、数据库连接、Agent 注册失败、插件目录/PVC、K8s 权限不足。

项目部署

部署资产与操作文档分离:

  • deploy/ 保存可执行脚本、环境文件、Compose 和 Kubernetes 清单。
  • docs/deploy/ 保存部署步骤和配置说明。
  • 模块内保留 Dockerfile、Spring profile、前端环境文件和插件运行模板。

部署模式

模式 后端 Profile 配置来源 适用场景 详细说明
Local local application-local.ymldeploy/local/*.env 开发调试、单机 jar 运行 Local 部署
Docker local deploy/docker/compose.ymldeploy/docker/env/*.env PostgreSQL、Manager、Agent、Web 单机容器联调 Docker 部署
Kubernetes devtestprod 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。

Local

默认部署根目录为 /opt/datafusion。首次运行前需要准备 PostgreSQL、初始化数据库,并 核对 deploy/local/manager.envdeploy/local/agent.env 中标记为“必填”的参数。 个人密码和路径写入 Git 忽略的 manager.env.localagent.env.local

启动顺序为 Manager、Agent、Web:

./deploy/local/start-manager.sh
./deploy/local/start-agent.sh
cd datafusion-web
npm run dev

Manager 和 Agent 脚本通过 nohup 后台运行,jar、日志、PID、插件和任务目录统一放在 /opt/datafusion。停止时先执行 stop-agent.sh,再执行 stop-manager.sh。详细的目录 权限、数据库初始化、纯 jar 运行和参数说明见 Local 部署

Docker

Compose 包含 PostgreSQL 16、Manager、Agent 和 Web。Manager、Agent 使用 local profile,数据库首次创建时自动执行 init_ddl.sqlinit_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_PORTMANAGER_PORTAGENT_PORTPOSTGRES_PORT 覆盖;应用参数位于 deploy/docker/env/manager.envdeploy/docker/env/agent.env。查看日志与停止服务:

docker compose -f deploy/docker/compose.yml logs -f
docker compose -f deploy/docker/compose.yml down

详细说明见 Docker 部署

Kubernetes

Kubernetes 使用 Kustomize 组织:

  • base/:Manager、Agent、Web、RBAC、ConfigMap 和共享 PVC。
  • overlays/dev|test|prod/:环境 profile、Nacos namespace 和环境入口。
  • addons/:可选 Nacos、StorageClass、FileBrowser、Flink/Spark Operator。

部署前必须完成以下配置:

  1. 设置目标 overlay 的 DATAFUSION_ENVNACOS_NAMESPACE。dev、prod namespace 当前留空;test 已配置现有测试集群 namespace。
  2. 创建 datafusion-secretbase/secret.yml 未纳入 Kustomize,常规发布不会覆盖 集群凭据。
  3. 替换 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 各业务域通常按 controllerserviceservice.impldaopodtovomodelenumsconstant 分层;只创建业务实际需要的层级。

内部模块依赖

下图表示当前 POM 中的直接 Maven 依赖和主要运行时调用。箭头由使用方指向被依赖模块,模块框内列出直接依赖,便于在缩放后继续阅读。

DataFusion 模块依赖关系

图源: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 只下沉确实需要跨模块共享的对象,避免把单一运行时模块的内部模型扩散为公共契约。

SDD 文档

项目使用结构化设计文档约定:

新增或修改功能时,先更新对应 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.tsdto.tsconstants.tsindex.tsxcomponents/
  • 统一 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 -am
cd 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

文档入口

About

DataFusion 是一个为 Data Agent 提供数据支撑的工具平台。平台围绕 Data Agent 对数据发现、接入、开发、理解、治理和执行的需求,组建工具能力。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages