QDATA 简历技术要点¶
基于项目源码实际实现提炼,每个要点均可深入到函数级别展开
1. 设计并落地企业级数据中台架构(16 模块 / 1,242 端点 / 2,095 表)¶
基于 Spring Boot 2.5.15 构建 Maven 多模块单体架构,采用 api + biz 拆分模式实现 10 个业务模块(system/att/da/dg/dm/dp/dp/ds/mc/ai)+ 12 个框架子模块(auth/common/config/file/generator/mybatis/neo4j/pay/quartz/redis/security/websocket)的分层治理。后端共 146 个 Controller 暴露 1,242 个 REST 端点,143 个 MyBatis Mapper 操作 2,095 张数据库表,模型层包含 118 个 DO + 403 个 VO + 223 个 DTO。通过 Spring Security 5.7.12 + JWT(HS512)实现无状态认证,Token 存入 Redis(login_tokens:{uuid},TTL 600min),剩余 20 分钟自动续期;同时基于 SA-Token 实现 OAuth 2.0 全四种授权模式(Authorization Code / Implicit / Password / Client Credentials)。前端 Vue 3.5.21 + Element Plus 2.7.6 构建 405 个 Vue 组件,8 个 Pinia Store 管理全局状态,91 个路由(18 个公开 + 4 个动态模块)通过后端菜单接口动态注入,import.meta.glob 实现组件懒加载。
2. 实现 DataX + Spark 双引擎 ETL 管线(7 种 Reader/Transition + 3 种写入模式)¶
DataX 引擎通过 DataXExecutor 以 Python 子进程方式执行 python3 datax.py job.json,DataXJsonBuilder 动态生成 Reader/Writer/Processor 配置,支持 VALUE_MAP、ADD_CONSTANT、SELECT_FIELDS、FIELD_DERIVATION 四种处理器。Spark 引擎(EtlApplication.main())接收 DolphinScheduler 传递的 Base64 编码 JSON 参数,执行 ReaderFactory → TransitionFactory(CleanTransition 31KB 最复杂 / SortTransition / FieldDerivationTransition / DataDeduplicationTransition / ValueMapTransition / AddConstantTransition / SelectFieldsTransition)→ WriterFactory 管线。DBReader 支持全量、ID 增量(Redis 游标 ETL_READER_ID_KEY + nodeCode + ":" + incrementColumn)、时间范围增量三种模式;DBWriter 支持全量(临时表+重命名交换)、追加、增量更新(PreparedStatement 批处理 Upsert)三种写入策略,方言适配 Kingbase8/SQL Server/Doris 的表重命名操作。任务状态通过 RabbitMQ 异步上报(交换机 ds.exchange.processInstance / ds.exchange.taskInstance),避免 Spark 任务直接调用 DolphinScheduler REST API。
3. 构建运行时动态 API 发布引擎(数据表/SQL → REST 端点)¶
基于 Spring RequestMappingHandlerMapping 实现运行时 API 动态注册/注销,MappingHandlerMapping 维护 ConcurrentHashMap<String, DsApiDO> 映射表,URL 模式 /services/{version}/{path}。RequestHandler 通过 @DsCheckClientToken 注解拦截请求,支持 4 种服务类型(数据服务/模型数据服务/第三方 API 代理/文件服务)和 3 种响应类型(详情/列表/分页)。DsApiServiceImpl.sqlParse() 使用 JSqlParser 解析 SQL 提取请求参数和响应字段,sqlJdbcNamedParameterBuild() 从表单配置生成带命名参数的多数据库方言 SQL(Kingbase8/PostgreSQL/SQL Server/MySQL/Oracle)。ApiMappingEngine 执行 SQL 查询并按响应类型格式化结果,异步 AsyncTask.doTask(DsApiLogDO) 记录调用日志,客户端认证通过独立的 JWT 机制(7 天 Token + 30 天 Refresh Token)实现。
4. 实现自动化元数据采集与变更检测系统(6 种方言 + 9 类变更追踪)¶
McTaskServiceImpl.runDaDiscoveryTask() 通过 Redis 分布式锁防重执行,按"加载数据库范围 → 对比数据库列表 → 对比表列表 → 对比列信息"四层递进采集元数据。变更检测覆盖 9 类列级变更(注释/类型/长度/精度/小数位/默认值/主键/外键/可空)和 4 类表级变更(注释/字段增删改/索引变更/存储大小)。DatabaseDialectFactory 注册 6 种数据库方言(MySQL/Hive/DM8 完整实现,Oracle/PostgreSQL/SQL Server 占位),每种方言实现 getStorageEngine()、getTableRowCount()、getTableIndexes()、getTablePartitionFields()、isColumnAutoIncrement() 等方法。Neo4j 图数据库通过 TableNode(@Node("Table"))和 TaskNode(@Node("Task"))两种节点类型、TABLE_TO_TASK 和 TASK_TO_TABLE 两种关系类型构建数据血缘图谱,LineageDataService 支持 Cypher 查询遍历上下游 Table → Task → Table 链路。
5. 设计数据质量规则引擎(9 种规则生成器 + 6 种数据库方言 + MongoDB 错误存储)¶
qdata-service-quality 独立微服务(端口 8083)采用工厂模式,QualitySqlGenerateFactory 通过 Spring Map<String, QualitySqlGenerator> 按 bean 名称自动注入 9 种规则生成器(CharacterValidation / CompositeUniqueness / DecimalPrecision / EnumValidation / GroupFieldCompleteness / LengthValidation / NumericRangeValidation / TimeOrderValidation / Common),每种生成器实现 generateSql()、generateErrorSql()、generateValidDataSql() 三个方法。ComponentRegistry 注册 6 种数据库方言(MySQL/Oracle12c/Oracle/SQL Server/DM8/Default),将规则 SQL 翻译为目标数据库方言。QualityTaskExecutorServiceImpl.executeTask() 通过 ThreadPoolTaskExecutor 异步执行 + Redis 去重锁,按数据源分组后逐条执行规则,错误数据存入 MongoDB(CheckErrorData 文档),支持 3 种修改方式(修改数据+更新物理表 / 修改备注 / 修改修复状态)。
6. 集成 DolphinScheduler 分布式调度(31 个 API 端点 + RabbitMQ 回调)¶
qdata-api-ds 模块通过 DsRequestUtils 封装 HTTP 调用(ds.base_url + ds.token header),定义 QianTongDCApiType 枚举覆盖 DolphinScheduler 31 个 API 端点(项目管理 4 个 / 流程定义 11 个 / 调度管理 6 个 / 执行管理 2 个 / 监控查询 5 个 / 任务编码 1 个)。5 个 Service 实现类(DsProjectServiceImpl / DsEtlTaskServiceImpl / DsEtlNodeServiceImpl / DsEtlSchedulerServiceImpl / DsEtlExecutorServiceImpl)封装项目创建、流程定义发布/下线、调度上线/下线、流程实例执行等操作。ETL Spark 任务通过 RabbitMQ 回调(而非直接 HTTP 调用),交换机 ds.exchange.processInstance / ds.exchange.taskInstance 配合路由键实现异步状态上报,后端 TaskLogListener / ProcessListener / TaskListener 消费消息并更新 DolphinScheduler 状态。同时支持 Quartz 进程内调度作为轻量级替代方案,通过 ScheduleConstants.QUARTZ / ScheduleConstants.DOLPHINSCHEDULER 动态切换。
7. 构建 AI 智能问数平台(19 个 AI 平台 + Text2SQL + 事实-维度表自动匹配)¶
基于 Spring AI 框架集成 19 个 AI 平台(国内 11 个:通义千问/文心一言/DeepSeek/智谱/星火/豆包/混元/SiliconFlow/MiniMax/Moonshot/百川;海外 8 个:OpenAI/Azure OpenAI/Anthropic/Gemini/Ollama/StableDiffusion/Midjourney/Suno/Grok),通过 AiPlatformEnum 统一管理。StatisticsPromptBuilder 实现 Text2SQL 生成,支持星型模型(事实表 + 维度表 + 事实-维度关联),数据库方言感知(MySQL/DM8/Oracle/Kingbase8/PostgreSQL/SQL Server/Doris),双回复模式(CHART 模式返回 SQL+维度+度量+时间粒度用于图表渲染,QA 模式返回文本或 SQL 用于问答)。MatchPromptBuilder 使用 AI 自动匹配事实表与维度表的关联关系,输入事实表元数据和维度表列表,输出 JSON 格式的关联关系(维度表/事实列名/维度列名/匹配原因)。qdata-service-ai 独立部署(JDK 17,端口 8087),通过 DualServiceImpl 实现 12 个空桩接口使其可脱离其他微服务独立运行。
8. 实现 Docker Compose 全栈编排(22 个服务 / light + all 双模式 / 预检体系)¶
通过 10 个 docker-compose 文件(base/dolphinscheduler/spark/hadoop/qdata/demo)模块化编排 22 个服务,使用 include 指令组合(需 Compose v2.20.2+)。支持 light(~10 服务,4CPU/8GB)和 all(~22 服务,8CPU/14GB)两种部署模式。qdata.sh 管理脚本提供 start/stop/restart/status/logs/doctor/uninstall 命令,内置 comprehensive 预检体系:Docker 版本(≥20.10.0)、Compose 版本(≥2.20.2)、Linux 容器模式检测、Rootless Docker 拒绝、CPU/内存校验、端口可用性检查、网络子网冲突检测(172.28.0.0/16)、包完整性验证。Nginx 反向代理配置 /prod-api → qdata-api:8080、/prod-ai → qdata-service-ai:8087,client_max_body_size 500M,代理超时 600s。数据库版本管理覆盖 V1.0.6 到 V1.6.1 共 13 步增量升级路径,V1.6.0 发生重大 Schema 扩展(表数量从 770 激增至 2,094)。