SeaTunnel Web UI 完整实战:零基础上手作业运维
【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel
凌晨三点,告警响了:一条从 MySQL 同步到 Elasticsearch 的数据管道停止写入。你希望 5 分钟内搞清楚作业卡在哪一步、异常是什么,而不是在几十个日志文件里翻找。Apache SeaTunnel 是一款高性能、分布式的多模态数据集成工具,它的 Web UI 是 SeaTunnel Engine 自带的可视化运维控制台:集群概览、作业列表、DAG 指标、异常文本、引擎日志,全部在一个页面上。
读完本文,你可以独立完成三件事:从零启动 SeaTunnel 引擎并打开 Web UI;提交一条 MySQL CDC 到 Elasticsearch 的同步作业;在告警来临时用界面把问题定位到具体节点。
🚀 30 秒跑通:从 clone 到打开 Web UI
最短路径只有四条命令。默认配置 config/seatunnel.yaml 里enable-http: true、port: 8080已经开启,所以启动引擎后浏览器直接能访问:
git clone https://gitcode.com/GitHub_Trending/se/seatunnel cd seatunnel sh bin/install-plugin.sh ./bin/seatunnel.sh --config ./config/v2.batch.config.template -m local最后一条命令会以 local 模式跑一个模板作业(FakeSource 生成数据、FieldMapper 做字段映射、Console 打印结果)。控制台打印出SeaTunnelRow行数据就说明链路通了。此时浏览器打开http://localhost:8080/#/overview,SeaTunnel Web UI 的 Overview 页面应该已经能看到这个作业。
上图展示了 SeaTunnel Engine 的整体结构:Client 提交作业,Master 负责任务调度,Worker 实际执行 source/transform/sink 任务,Web UI 就是挂在这套 HTTP 服务之上的巡检入口。
如果你看到Address already in use、connect to master failed或浏览器一直转圈连不上 8080,直接跳到下面的避坑表格。
跑通第一个作业只是热身。接下来看两个真实场景:一条 CDC 同步管道怎么建,以及建完之后怎么用 Web UI 盯它。
🎯 场景一:从 MySQL CDC 到 Elasticsearch,五步搭一条同步管道
要解决什么问题:业务库crm.customer_profile表持续变更,需要把全量加增量数据同步到 Elasticsearch 供搜索,中途还要清洗手机号格式。
操作路径:
- 在本地工作副本的
config/plugin_config中登记需要的连接器:
--seatunnel-connectors-- connector-cdc-mysql connector-elasticsearch --end--- 执行
sh bin/install-plugin.sh,并把 MySQL 驱动 jar 放入lib/目录。 - 新建作业配置,source 部分核心配置如下(
table-names按你的库表填写):
source { MySQL-CDC { plugin_output = "customer_raw" url = "jdbc:mysql://mysql.example.com:3306/crm" server-id = 5701-5704 startup.mode = "initial" } }- transform 段按
Metadata(暴露 row_kind 等元数据)→Replace(去掉手机号中的-)→Sql(过滤和状态值映射)串联,sink 段配置 Elasticsearch 的hosts、index、primary_keys,完整示例可参考 docs/zh/getting-started/recipes/mysql-cdc-to-elasticsearch.md。 - 提交作业:
./bin/seatunnel.sh --config ./config/mysql-cdc-to-elasticsearch.conf -m local。 - 对源表执行一条
UPDATE,再到 ES 索引里查询,验证增量是否实时写入。
关键配置解读:
| 参数 | 推荐值 | 为什么 |
|---|---|---|
server-id | 有宽裕的区间,如 5701-5704 | 多个 CDC 作业必须用不重叠区间,否则 binlog 读取冲突 |
startup.mode | initial | 先做全量快照再接增量;只关心增量才用earliest/latest |
MySQLbinlog_format | ROW且binlog_row_image=FULL | CDC 的硬性要求,先用SHOW VARIABLES确认 |
上图对应的就是这条管道的执行形态:source 读 binlog,transform 逐级清洗,sink 批量写入 ES,中间每个节点都可以在 Web UI 里单独看指标。
管道建好了,但同步作业会长期运行,问题迟早会找上门。下一个场景就是:不翻日志,光靠 Web UI 把故障定位出来。
📊 场景二:用 Web UI 五分钟内定位作业问题
要解决什么问题:流式作业跑了一周后吞吐骤降或失败,你需要判断是 source 读不动、transform 积压还是 sink 写不进去。
操作路径:
- 打开 Overview 页,先看集群 slot 占用、worker 数量和作业总数,确认不是整个集群出问题。
- 进入 Jobs 页,运行中和已完成的作业分列两块,点击目标作业进详情。
- Job Detail 的 Overview tab 看 DAG:source 和 sink 的吞吐曲线一目了然,哪一段掉量看哪一段。
- 作业失败时切到 Exception tab 读异常文本;需要更多上下文时切 Log tab 看引擎日志。
- 若开启过实时可观测性,DAG 节点上会显示忙闲比例,边上会按下游等待占比着色,点击节点可在右侧抽屉看最近 N 分钟的实时曲线。
- 怀疑节点本身有问题时,去 Workers / Master 页看系统监控信息。
关键配置解读:
| 参数 | 推荐值 | 为什么 |
|---|---|---|
env.engine.observability | 开启 | DAG 实时指标(忙碌度、队列占比)的前置条件 |
async_boundaries/split_sink_io | 按需开启 | 在指定位置插入队列,背压才有可视信号 |
| 实时指标时间窗口 | 默认 3 分钟,上限 10 分钟 | 窗口越大历史越长,轮询开销也越高 |
Overview 页右侧的运行中作业卡片会周期性刷新并支持分页,作业失败后也会从"运行中"移入"已完成",所以回看历史作业不用另找入口。
界面能看不能改,这是设计使然,也是使用它的第一个决策点。下面这张表把"什么时候看 UI、什么时候该换工具"以及最常见的症状修一次说完。
🛡 决策指南与避坑:症状、原因和一行修复
| 症状 | 最可能原因 | 一行修复 / 配置 | 深入排查路径 |
|---|---|---|---|
| 浏览器打不开 8080 | HTTP 未开启或端口被占 | enable-http: true或enable-dynamic-port: true | docs/zh/engines/zeta/rest-api-and-web-ui.md |
| 配了 context-path 后页面 404 | 路由没放在前缀之后 | 访问http://host:8080/<context-path>/#/overview | docs/zh/engines/zeta/web-ui.md |
| CDC 作业失败,日志含 server-id 冲突 | 两个 CDC 作业区间重叠 | 错开server-id区间后重启作业 | 场景一第 3 步配置 |
| 吞吐骤降、sink 端积压 | 下游写入限速或批次过小 | 调大max_batch_size或parallelism | docs/zh/engines/zeta/realtime-observability.md |
| 历史作业查不到了 | 已过过期时间 | 调大history-job-expire-minutes(默认 1440) | config/seatunnel.yaml |
| 内网暴露了 UI,任何人都能看 | 未开认证 | enable-basic-auth: true并配置账号密码 | docs/zh/engines/zeta/security.md |
| 作业反复重启、worker 掉线 | worker 资源不足或 GC 严重 | Workers 页看系统监控,调整 heap 与 slot 配置 | config/jvm_worker_options |
再给三条诚实的使用边界:
- Web UI 是只读巡检台,不能提交、取消或 savepoint
- 需要批量自动化时改用 REST API V2 或命令行
- 一次性搬数据不需要起集群
- local 模式单机跑完即止
- 需要调度编排和告警通道
- 把 UI 当观测面板,调度交给外部系统
作业详情页的 Overview tab 把 DAG、吞吐指标和可观测曲线集中在同一屏,是值班时看得最频繁的一页。
🔗 延伸与生态:下一步看哪里
- Web UI 界面说明:docs/zh/engines/zeta/web-ui.md
- REST API V2 参考:docs/zh/engines/zeta/rest-api-v2.md
- 前端源码:seatunnel-engine/seatunnel-engine-ui/
- CDC 同步完整教程:docs/zh/getting-started/recipes/mysql-cdc-to-elasticsearch.md
- 引擎与集群部署:docs/zh/engines/zeta/deployment.md
下次凌晨的告警再响,你打开的不再是日志目录,而是那个 8080 端口:Overview 确认集群,DAG 定位节点,Exception 读出原因,5 分钟把管道拉回来。
【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考