Skip to content

wgzhao/addax-admin

Repository files navigation

Addax Admin

License Java Spring Boot Vue 3

Addax Admin 是为 Addax ETL 引擎打造的一套现代化、企业级 ETL 管理与监控控制台。项目以 Monorepo 的形式组织,包含完整的后端 API 服务与前端管理界面,旨在提供从任务配置、调度执行、运行监控到日志审计的一站式运维体验。

核心目标:让数据工程师和运维人员更容易地管理 Addax 作业、观察运行状态、调优并发与重试策略,并在多节点部署下保证高可用与并发控制。


目录结构(简要)

addax-admin/
├── backend/                 # Spring Boot 3 + Java 21 后端服务(API、调度、持久化、Redis 仲裁)
├── frontend/                # Vue 3 + Vite + TypeScript + Vuetify 管理界面
├── scripts/                 # 部署与运维脚本(DB 初始化、systemd service 模板等)
├── start-dev.sh             # 一键本地开发启动脚本
├── SKILLS.md                # AI/协作与代码库能力说明(由 AI 生成)
└── README.md                # 本文档

主要组成

  • Addax Admin Backend:Spring Boot 实现,负责任务持久化(Postgres)、分发逻辑、Redis 锁与仲裁、权限与 JWT、调度(cron/周期)等。
  • Addax Admin Frontend:基于 Vue 3 + Vuetify 的单页应用,提供任务配置、ODS 表管理、日志查看、实时监控与告警配置。
  • 数据库初始化:backend/src/main/resources/schema.sql 和 data.sql 提供数据库 schema 与默认数据。

亮点与特色

  • 混合并发控制架构:DB 持久化队列 + Redis 仲裁(per-job 锁、全局/源级 permit),兼顾可靠性与性能。
  • 快速批量创建采集表:在 UI 中只需点击几下即可批量新增数百到上千张采集表;并支持一键在目标存储(例如 Hive)中同步创建表与分区,显著提升大规模数据接入效率。
  • 表结构演化支持:自动探测源端表结构变化(字段类型变更、新增/删除字段等),并可自动同步修改目标表结构;对有分区的表提供历史数据兼容策略,最大限度减少中断与人工干预。
  • 动态表名采集:原生支持日表、月表等动态表名模板(例如 my_table_{yyyyMMdd}),自动解析时间规则并生成相应的采集任务,方便处理按时间切分的数据源。
  • 增量采集与智能过滤:支持使用上一次采集结果(例如前一日最大 ID 或指定字段)作为本次增量采集的过滤条件;同时支持自定义过滤表达式,适合复杂增量场景。
  • 多节点并发与权重:采用 sharing-nothing 架构与 Redis 仲裁,支持节点权重设定(node.concurrency.weight),实现全局/源级并发控制、任务高可用与负载均衡。
  • 可视化管理:完整的任务配置、字段对比、实时执行进度与历史日志查询,提升运维效率。
  • 企业级安全与可扩展性:JWT + Spring Security 做权限与认证,采用 Spring Data JPA 与模块化前端设计,方便定制与扩展。

快速开始(本地开发)

先决条件

  • Java 21
  • Maven 3.8+
  • Node.js >= 16.x
  • Yarn(或 npm)
  • PostgreSQL(建议 15+)、Redis(用于任务仲裁)

一键启动(推荐)

# 克隆项目并进入目录
git clone https://github.com/wgzhao/addax-admin.git
cd addax-admin

# 一键启动前后端开发环境
./start-dev.sh

若选择手动启动:

后端(开发)

# 1. 初始化数据库(在 PostgreSQL 中创建数据库 addax_admin)
psql -U postgres -d your_database -f backend/src/main/resources/schema.sql
psql -U postgres -d your_database -f backend/src/main/resources/data.sql

# 2. 运行后端服务
cd backend
mvn spring-boot:run

前端(开发)

cd frontend
yarn install
yarn dev

默认访问地址(开发)

生产构建与运行

后端打包并运行:

mvn clean package
java -jar backend/target/addax-admin-<version>.jar

前端构建并静态部署:

yarn build

建议在生产环境使用 docker + docker-compose 将 Postgres / Redis / 后端 / 前端(静态)组合部署。


配置(环境变量)

后端配置位于:backend/src/main/resources/application.properties 可以通过环境变量覆盖(示例:backend/config/env.template.sh)

重要环境变量(后端):

  • DB_HOST, DB_PORT, DB_NAME, DB_USERNAME, DB_PASSWORD
  • REDIS_HOST, REDIS_PORT, REDIS_PASSWORD, REDIS_DB
  • LOG_DIR(默认 ./logs)
  • node.concurrency.weight(调度权重)
  • WECOM_ROBOT_KEY(企业微信机器人,用于告警)

前端环境变量(vite)

文档链接

  • 功能详解(含批量创建、schema 变更、动态表、增量过滤、多节点并发等):docs/FEATURES.md
  • 示例与模板:docs/examples/

数据库与迁移

项目自带初始化脚本:

  • backend/src/main/resources/schema.sql(表结构与索引)
  • backend/src/main/resources/data.sql(初始数据)

如果你在生产环境部署,建议:

  • 在单独的数据库实例创建专用用户与数据库
  • 使用备份与版本化迁移工具(Flyway / Liquibase)管理 schema 变更

调度与并发控制机制概览

核心思路:保留数据库持久化语义(任务队列、审计、重试),用 Redis 做实时仲裁以避免数据库争用并支持低延迟并发限制。

  • 每个任务在 DB 持久化为 etl_job_queue,节点领取任务时会获取 Redis per-job 独占锁以及 permit(全局或源级)。
  • Redis 锁使用 SETNX + TTL 并通过 Lua 脚本释放以保证 token 匹配。
  • 执行中节点会周期性续租锁与 permit,完成后释放资源并更新 DB 状态。

充分利用此机制可以在多实例部署下保证高可用与并发可控。


日志与监控

  • 默认日志目录:./logs(可通过 LOG_DIR 覆盖)
  • 后端日志配置:backend/src/main/resources/logback-spring.xml
  • 建议在生产通过日志聚合(ELK / Loki)和监控(Prometheus + Grafana)汇总指标与告警

常见故障排查

  • 应用无法连接数据库:检查 DB_* 环境变量与 schema.sql 是否已应用
  • Redis 连接失败:确认 spring.data.redis.* 环境变量与网络可达
  • JWT 认证错误:检查后端 JwtService 配置(jwt.expiration、密钥等)
  • 前端 API 跨域或代理异常:检查 VITE_API_BASE_URL 与 vite.config.ts 的 proxy 配置
  • 端口冲突:默认前端 3030,后端 50601,请确认端口未被占用

开发者与贡献指南

欢迎贡献!建议流程:

  1. Fork && 新建分支(feature/xxx 或 fix/xxx)
  2. 本地开发并保证 lint / type check 通过
  3. 提交并发起 Pull Request,描述变更理由和回归测试步骤

代码质量工具

  • 前端:ESLint + Prettier + TypeScript(vue-tsc)
  • 后端:建议在 CI 中运行 mvn -DskipTests=false test

许可证

本项目基于 Apache License 2.0(详见 LICENSE 文件)。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published