当前位置: 首页 > news >正文

用 AI 改造一个 Flink SQL 项目:从脚本提交到数据同步平台

用 AI 改造一个 Flink SQL 项目:从脚本提交到数据同步平台

这几年做实时数仓和 Flink SQL 任务时,我越来越明显地感觉到一件事:

很多数据同步任务本身并不复杂,复杂的是配置、提交、排查和维护这一整套流程。

比如一个很普通的 MySQL 到 Kafka 同步任务,真正的业务逻辑可能只有几行字段映射。但在落地的时候,我们还是要配置数据源、确认表结构、写 source DDL、写 sink DDL、写 insert SQL、配置并行度、配置 checkpoint、提交到 Yarn、查看 Flink 任务状态、排查失败原因。

这些事情单独看都不难,但组合起来就很容易变成重复劳动。

所以最近我准备把手上的一个 Flink SQL 项目重新改造一下,借助 AI 搓一个轻量级的数据同步平台。

这个项目叫 sqlSubmit

它最早的定位很简单:把写好的 Flink SQL 提交到集群里跑起来。

目前项目里已经有一些基础能力:

  • 支持读取 SQL 文件并提交执行。
  • 支持通过 properties 管理任务参数。
  • 支持 checkpoint、state backend 等运行配置。
  • 支持注册 UDF、UDAF、UDTF。
  • 已经扩展了一些自定义 connector,比如 MySQL、HBase、Redis、StarRocks、HTTP、Socket。
  • 项目里也沉淀了不少 Flink SQL 示例,包括 Kafka、JDBC、Hudi、Iceberg、窗口计算、lookup join 等场景。

也就是说,它不是一个空项目,而是一个已经能跑 SQL 任务的工具型项目。

这次改造的目标,就是把它从“脚本提交工具”逐步演进成“可配置、可生成、可提交、可追踪”的同步平台。

01 为什么要做平台化

用脚本提交 Flink SQL 有一个好处:简单直接。

开发同学写好 SQL,本地或者服务器上执行提交脚本,任务就能跑起来。对于个人开发、功能验证、小规模任务来说,这种方式很顺手。

但随着任务数量变多,问题也会慢慢出现:

  • 每个任务都要手写 source 和 sink DDL。
  • 字段类型映射容易出错。
  • 不同任务的 checkpoint、并行度、队列等参数缺少统一管理。
  • 任务提交之后,很难从平台视角追踪运行状态。
  • SQL 改过几版、线上跑的是哪一版,不容易回溯。
  • 新同学接手时,需要先理解一堆脚本、参数和目录约定。

这些问题的本质,不是 Flink SQL 不够好,而是缺少一层工程化的平台能力。

所以我希望做一个平台,把重复的部分收敛起来:

页面上配置数据源,平台采集元数据,用户选择字段映射,系统生成 Flink SQL,然后复用现有 sqlSubmit.jar 提交到 Yarn,最后通过 Flink REST API 回查任务状态。

这样既保留 Flink SQL 的透明度,又降低日常同步任务的使用门槛。

02 第一阶段先做什么

平台化最怕一开始就做大而全。

如果一上来就把 CDC、血缘、多租户、权限、拖拽编排、指标大盘全部拉进来,最后很容易变成一个看起来很完整、但主链路还没跑稳的系统。

所以第一阶段我只打算做一个 MVP。

先支持几条最基础的同步链路:

  • datagen -> print
  • datagen -> kafka
  • mysql -> print
  • mysql -> kafka
  • mysql -> mysql

Kafka 第一阶段只作为目标端,不先做 source schema 推断。

MySQL CDC、Kafka source、权限、多租户、数据血缘、可视化拖拽编排,这些能力都先放到后面。

第一阶段真正要验证的是:

一个同步任务,能不能从页面配置开始,经过 SQL 生成、版本保存、任务提交、状态回查,完整跑通。

只要这条主链路跑通,后面的能力就可以一层一层加。

03 整体架构

第一版架构会保持轻量。

前端用 Vue,后端用 Spring Boot,元数据库用 MySQL,执行层继续复用当前项目的 sqlSubmit.jar

整体流程大概是这样:

架构图

用户在页面创建数据源、选择来源表、配置目标端和字段映射。

后端保存结构化任务配置,并根据配置生成 Flink SQL。

生成后的 SQL 会保存版本,每次提交都指向一个不可变的 SQL 版本。

提交时,平台把 SQL 文件和任务 properties 文件写到指定目录,然后拼接 Flink CLI 命令,把任务提交到 Yarn。

任务运行后,平台通过 Flink REST API 查询任务状态、异常信息和 checkpoint 概况。

这里有一个关键取舍:

第一阶段不重写执行引擎。

因为当前 sqlSubmit 已经具备 SQL 文件解析、参数加载、checkpoint 配置、UDF 注册、StatementSet 执行等能力。平台侧真正要做的,是把“任务配置、SQL 生成、提交编排、状态追踪”这几件事补齐。

这样改造成本更低,风险也更可控。

04 平台核心模块

第一版我会把后端拆成几个模块。

第一个是数据源管理。

平台需要维护 MySQL、Kafka、Datagen、Print 这些数据源。MySQL 要支持 JDBC 连接测试,Kafka 要验证 bootstrap server 和 topic,Datagen 和 Print 作为内置数据源直接可用。

第二个是元数据采集。

对于 MySQL source,平台可以通过 JDBC 元数据或者 SHOW FULL COLUMNS 读取表字段,然后把 MySQL 类型映射成 Flink SQL 类型。

比如:

  • bigint 映射为 BIGINT
  • int 映射为 INT
  • varchartext 映射为 STRING
  • decimal(p,s) 映射为 DECIMAL(p,s)
  • datetimetimestamp 映射为 TIMESTAMP(3)

如果遇到不能安全映射的类型,先映射成 STRING,同时标记为需要人工确认。

第三个是 SQL 生成器。

这是整个平台的核心。

用户在页面上选择 source、sink、字段映射和运行参数后,平台生成完整的 Flink SQL:

CREATE TABLE source_xxx (...);CREATE TABLE sink_xxx (...);INSERT INTO sink_xxx
SELECT ...
FROM source_xxx;

生成 SQL 不是为了隐藏 SQL,而是为了让 SQL 更稳定、更可审查。

每次提交前都能预览,每次提交后都保存一个不可变版本。这样后续排查问题时,可以明确知道某一次任务到底跑的是哪一版 SQL。

第四个是任务管理。

任务需要区分草稿、已生成、运行中、失败、取消、完成等状态。

每次生成 SQL,都可以保存为一个版本;每次提交,都会产生一个任务实例。

任务定义、SQL 版本、运行实例要拆开存。

这样做的好处是,任务可以持续编辑,但已经提交过的 SQL 版本不能被偷偷改掉。

第五个是 Yarn 提交器。

平台后端会生成 SQL 文件和 properties 文件,然后复用现有 sqlSubmit.jar 提交到 Yarn。

示例命令大概是这样:

flink run \-m yarn-cluster \-ynm user_job_name \-yqu default \/opt/sqlsubmit/sqlSubmit.jar \--sql /opt/sqlsubmit/generated/sql/job_1001_v1.sql \--job.prop.file /opt/sqlsubmit/generated/prop/job_1001_v1.properties

第六个是 Flink 状态回查。

任务提交之后,平台需要记录 Yarn application id、Flink job id、提交命令、SQL 路径、任务状态、异常摘要等信息。

后续通过 Flink REST API 查询运行状态、异常信息和 checkpoint 概况。

05 AI 在这个项目里怎么用

这次我想重点尝试的,不是让 AI 一次性生成一个完整平台。

那样大概率会得到一个看起来很完整、但细节经不起推敲的项目。

我更想把 AI 当成工程副驾驶。

我负责判断方向、拆任务、定边界;AI 负责加速实现、补齐样板代码、整理方案、发现遗漏点。

比如这个项目里,AI 可以参与这些事情:

  • 梳理旧项目结构。
  • 提取已有提交逻辑。
  • 设计元数据库表。
  • 设计 REST API。
  • 生成 SQL 模板。
  • 补充 MySQL 到 Flink 的类型映射规则。
  • 生成后端 CRUD 代码。
  • 生成前端任务配置页面。
  • 根据报错日志辅助定位 Flink SQL 问题。
  • 帮忙整理实现过程,沉淀成文章。

但有些事情不能完全交给 AI。

比如第一阶段到底支持哪些链路,是否要引入 CDC,任务模型如何设计,SQL 版本是否不可变,Kafka source 要不要现在做,这些都需要工程判断。

AI 能提高速度,但不能替代边界感。

06 我希望这个平台最后是什么样

第一版目标很简单:

让一个普通开发同学,不用手写完整 Flink SQL,也能完成一个 MySQL 到 Kafka、MySQL 到 MySQL 的基础同步任务。

同时,对熟悉 Flink 的人来说,平台生成的 SQL 又必须是透明的、可编辑的、可复制的、可排查的。

这点很重要。

很多平台的问题,是把底层细节藏得太深。出了问题之后,用户不知道实际提交了什么,也不知道应该从哪里排查。

我希望这个平台反过来:

页面降低入门门槛,SQL 保留工程透明度。

后续如果第一阶段跑通,再继续扩展:

  • MySQL CDC 实时同步
  • Kafka source schema 管理
  • StarRocks、HBase、Redis 等 connector
  • 任务模板
  • 运行指标看板
  • 失败自动诊断
  • 数据血缘
  • 多租户和权限
  • AI 辅助生成字段映射和同步任务

07 接下来准备怎么写

这篇算是一个开篇。

后面我准备边做边记录,把这个平台拆成几篇文章写:

第一篇:用 AI 设计 Flink 同步平台的元数据库表。

第二篇:让平台自动生成 Flink SQL,从字段映射到任务提交。

第三篇:复用 sqlSubmit.jar,把 Flink SQL 提交到 Yarn。

第四篇:做一个任务配置页面,让同步任务真正从页面跑起来。

这条线如果跑通,就不只是做一个 demo,而是能把一个已有 Flink SQL 工具项目,逐步改造成一个真正可用的数据同步平台。

以前写这种平台,更多是一个人慢慢敲代码、查文档、补样板、试错。

现在更像是:人来把握方向,AI 来加速落地。

这可能会是接下来一段时间里,我最想认真跑通的一件事。

先把第一版 MVP 搓出来。

从 MySQL 到 Kafka,从 MySQL 到 MySQL。

从一个 SQL 文件,走向一个真正的平台。

http://www.gsyq.cn/news/1547294.html

相关文章:

  • 2026年贵阳铁签烤肉怎么选?花果园、南明区正宗老贵阳烤肉店深度横评 - 优质企业观察收录
  • 青岛卖黄金别踩坑 2026年6月回收门店盘点 - 余生黄金回收
  • 爱马仕LV怎么卖高价?佛山正规包包回收门店实测 - 讯息早知道
  • 微信群怎么发起视频投票?线上视频投票制作完整操作教程 - 微信投票小程序
  • AI赋能:一键生成内容,让创作更简单
  • 网红带货平台深度洞察:从流量变现到品效合一的进化之路 - GEORANK
  • IMU学习
  • 告别熬夜盯单!抖掌柜APP全自动化运营攻略,多店无货源抖店自动下单售后一体化 - 资讯报道
  • SQL注入实战:从登录框到数据库的完整手工渗透与防御解析
  • 2026年一件代发:解读行业三大核心趋势 - 资讯快报
  • 2026 沈阳黄金回收渠道全测评,跑遍 11 区这几家最值得去 - 奢侈品回收评测
  • 2026 年 6 月许昌哪家装修公司靠谱?云端点墨等 10 家口碑装企最新深度测评 - 速递信息
  • 支付宝提醒:未授权内测邀请码有偿交易,用户勿付费购买!
  • 飞机票用哪个平台买便宜又靠谱?去哪儿网比价指南 - 博客万
  • 时值甄选回收鹦鹉螺,常州同城高端腕表变现实力榜单 - 名奢变现站
  • 2026金价高位变现攻略 青岛本地甄选回收门店实测推荐 - 讯息早知道
  • 体检中心后台管理系统源码(Vue3+TS+Vite),含用户管理、预约审核与报告归档功能
  • MLOps落地实战:从模型交付断点到生产闭环
  • 2026 智能外呼机器人 TOP5避坑榜单|合规线路意向筛选系统优劣盘点 - GrowthUME
  • 收藏 | AI入门指南:小白程序员如何抓住大模型红利,一步到位入行?
  • WarcraftHelper完整指南:三步让你的魔兽争霸3重获新生
  • 滨州市2026年奢侈品手表包包回收门店权威测评:这五家店铺回收价格最高 - 谊识预商务
  • 遗传算法工程实战:选择压力、自适应变异与问题感知交叉
  • 2026泰州黄金回收首推八家持证资质老店精选靠谱 - 生活测评君
  • NXP DPAA FMC工具实战:XML策略驱动FMan硬件加速,实现高性能网络数据平面
  • 数字展陈展厅设计公司推荐:2026最具实力的展厅设计公司排行榜 - 优质品牌甄选
  • 福州GEO优化服务介绍 - 资讯焦点
  • 为什么很多人不是不想读书,而是总在“准备读”的路上卡住了
  • 高效构建跨平台Switch模拟器:yuzu核心技术深度解析与实战指南
  • 海口市闲置奢侈品变现必看:手表包包回收门店真实测评汇总 - 谊识预商务