SeaTunnel 数据集成:一条命令跑通到生产集群
【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel
假设你的订单 MySQL 表每天涨两百万行,下游的 Doris 报表要求分钟级看到新数据,同时还得兼顾全量补数、字段变更、失败重跑。手撸 DataX 脚本加定时任务能撑一阵,但全量增量割裂、断点续传全靠人肉,迟早要崩。这类"结构化数据跨系统搬运"的场景,就是 Apache SeaTunnel 数据集成工具的主战场:一个声明式配置文件描述"从哪读、怎么加工、写到哪",批处理、流处理、CDC 增量它都接。下面先把它跑起来,再一步步往生产环境推。
它是什么,凭什么用
SeaTunnel 是一个多模态、高性能、分布式的数据集成平台,支持 160+ 连接器覆盖数据库、消息队列、对象存储等常见系统。对你最直接的三个卖点:批流一体(同一套配置改个模式就是流式)、分布式快照算法(断点续传不丢数不重数)、无重型依赖(自带 Zeta 引擎,单机就能跑,不需要先养一个 Hadoop 集群)。
把它跑起来
先确认环境,三行要点:
- JDK 8 及以上(推荐 11)
- 内存 ≥ 4GB(生产建议 16GB+)
- 磁盘 ≥ 10GB(安装包、连接器 jar、日志)
最省事的路径是二进制包,一条链走完:
VERSION=3.0.0 wget https://archive.apache.org/dist/seatunnel/${VERSION}/apache-seatunnel-${VERSION}-bin.tar.gz tar -xzf apache-seatunnel-${VERSION}-bin.tar.gz cd apache-seatunnel-${VERSION} # 安装连接器,只装 plugin_config 里列出的插件 sh bin/install-plugin.sh装完之后connectors/目录下就是各连接器独立的 jar,运行期按配置按需加载。config/plugin_config里默认列了全部连接器,建议只留你要用的(比如connector-fake、connector-console、connector-jdbc),省下载时间和磁盘。需要改源码的话,git clone https://gitcode.com/GitHub_Trending/se/seatunnel后执行sh ./mvnw clean install -DskipTests,产物在seatunnel-dist/target/。偏好容器的话,拉官方镜像挂载 config 和 jobs 目录即可。
跑通第一个同步任务
写一份最小配置,存成config/v2.batch.config.template。前一半定义环境和数据源:
env { parallelism = 1 # 并行度:同时跑几个子任务 job.mode = "BATCH" # BATCH 一次性全量;STREAMING 则是持续流式 } source { FakeSource { plugin_output = "fake" # 给下游的"取件码" row.num = 16 # 生成 16 行测试数据,不依赖任何外部系统 schema = { fields { name = "string" age = "int" } } } }FakeSource专门用来做冒烟测试,不用真的连数据库。后一半是转换和输出:
transform { FieldMapper { plugin_input = "fake" plugin_output = "fake1" field_mapper = { age = age # age 保持不变 name = new_name # name 改名成 new_name } } } sink { Console { plugin_input = "fake1" # 最终数据直接打到终端 } }执行:
./bin/seatunnel.sh --config ./config/v2.batch.config.template -m local预期在终端看到类似这样的输出:
INFO ConsoleSinkWriter - subtaskIndex=0 rowIndex=1: name=John, age=23 INFO ConsoleSinkWriter - subtaskIndex=0 rowIndex=2: name=Jane, age=31 INFO ConsoleSinkWriter - subtaskIndex=0 rowIndex=3: name=..., age=...看到 16 行数据依次打印、且进程正常退出(无 Exception 堆栈),说明安装、配置解析、执行引擎整条链路都通了。跑通了?往下看。
从单机到多节点:SeaTunnel 集群部署
一句话区别:-m local把整个引擎塞进一个 JVM,适合开发验证;集群模式 Master 负责调度、Worker 负责搬数据,节点挂掉任务能恢复,是生产该用的形态。
关键只改一个文件:config/hazelcast.yaml。默认配置里节点发现走的是localhost,多机部署必须填真实 IP:
network: join: tcp-ip: enabled: true # 静态 IP 列表发现,跨网段、防火墙环境都稳 member-list: - <node1-host> # Master 所在机器 - <node2-host> # Worker 机器,有几台填几台同理把config/hazelcast-client.yaml的cluster-members指向集群节点地址,这是提交作业时的客户端入口。
启动按角色分开,注意在对应机器上执行:
# 在 Master 机器上执行 sh bin/seatunnel-cluster.sh -m master -c config/hazelcast-master.yaml # 在每台 Worker 机器上执行 sh bin/seatunnel-cluster.sh -m worker -c config/hazelcast-worker.yaml节点起来后提交作业,把 local 换成 cluster:
./bin/seatunnel.sh --config ./jobs/mysql-to-doris.conf -m cluster上生产之前必做的三件事
JVM 内存与 GC:SeaTunnel 性能调优从这里开始
改config/jvm_options(Worker 节点重点调,它们干搬运的活):
| 参数 | 建议值 | 一句话理由 |
|---|---|---|
-Xms/-Xmx | 物理内存的 50%~75% | 堆和机器匹配,避免频繁 GC 拖累吞吐 |
-XX:MaxMetaspaceSize | 2g | 连接器多的作业,元空间 OOM 是常客 |
| GC | G1GC(默认已开) | 低停顿,适合持续数据流场景 |
checkpoint.interval | 10000 | 快照频率在恢复点和 IO 开销之间取平衡 |
dynamic-slot | true | 动态分配槽位,多任务不打架 |
后两项在config/seatunnel.yaml的engine.checkpoint和engine.slot-service段里。
高可用:挂了别慌
流式任务在作业配置的env里加上重试策略,进程级失败自动拉起:
env { job.retry.count = 3 # 失败后最多重试 3 次 job.retry.interval = 60000 # 每次重试间隔 60 秒 }同时确认 checkpoint 存储(seatunnel.yaml里checkpoint.storage)落在可靠介质上,默认是 HDFS,纯独立部署可改成file:///指向本地数据盘。有了这两个,"断点续传"才真正成立。
可观测性:把作业看清楚
seatunnel.yaml里telemetry.metric.enabled打开后,指标就能被外部采集,接 Prometheus + Grafana 是标准玩法。Web UI 默认开在 8080 端口,浏览器访问http://<master-host>:8080能看到任务列表、Worker 状态和实时吞吐,比翻日志快得多:
日志方面改config/log4j2.properties配一个 RollingFile 追加器,按 100MB 滚动、保留 30 份,避免磁盘被日志写满。
踩坑速查
作业启动报 ClassNotFoundException 或找不到插件→ 连接器 jar 没装进connectors/目录,或名字和config/plugin_config对不上 → 把 plugin_config 收敛到实际需要的连接器,重跑sh bin/install-plugin.sh,再ls connectors/确认目录存在。
跑大数据量时 OOM 或 GC 严重→jvm_options里堆给小了,而且 Worker 才是大头 → 按上表调-Xmx,优先加 Worker 节点的内存,Master 给调度用不必太大。
Worker 死活不加入集群→ 5801 端口没开,或hazelcast.yaml的 member-list 还是 localhost →telnet <node-host> 5801先验证端口通不通,防火墙放行后把hazelcast.yaml和hazelcast-client.yaml里的地址都换成真实 IP,重启节点。
往哪走
想搞 MySQL 实时增量同步,看 connector-cdc 模块;想搭 Grafana 看板,先启用 telemetry 再读 官方中文文档。
【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考