保姆级教程:零基础快速上手 Apache SeaTunnel(原 Waterdrop)
在大数据生态中,数据集成 (Data Integration)是连接数据源与数据仓库、湖仓、AI 平台的关键环节。面对 Kafka、MySQL、Hive、ClickHouse、Doris 等数十种异构系统,如何高效、稳定、低成本地实现数据同步?Apache SeaTunnel(原名 Waterdrop)正是为此而生!
SeaTunnel 是一个 分布式、高性能、易扩展的下一代数据集成平台 ,支持批处理与流处理,兼容 Flink 和 Spark 引擎,配置简单如写 YAML,部署轻量如单机脚本。本文将手把手带你从 安装 → 配置 → 运行 → 调试 全流程入门,真正做到"零基础也能跑通第一个任务"!
一、SeaTunnel 是什么?
- 🌊 开源项目:Apache 软件基金会顶级项目(2023 年毕业),前身是滴滴开源的 Waterdrop。
- ⚡ 核心能力 :
- 支持 100+ 数据源/目标(MySQL、PostgreSQL、Oracle、Kafka、Hive、Iceberg、S3、Doris、StarRocks 等)
- 同时支持 批处理(Batch) 与 流处理(Streaming)
- 可选执行引擎:Spark 或 Flink
- ✅ 优势 :
- 配置即代码(YAML/JSON),无需写 Java/Scala
- 自动并行、断点续传、Exactly-Once 语义(部分引擎)
- 资源占用低,单机可跑,集群可扩
二、环境准备(以本地单机为例)
1. 前提条件
- JDK 8 或 JDK 11(推荐)
- Linux / macOS / Windows(WSL 推荐)
- (可选)已安装 Spark 或 Flink(SeaTunnel 也自带嵌入式模式)
2. 下载 SeaTunnel
# 进入工作目录
mkdir -p ~/seatunnel && cd ~/seatunnel
# 下载最新稳定版(以 2.3.6 为例)
wget https://archive.apache.org/dist/seatunnel/2.3.6/apache-seatunnel-2.3.6-bin.tar.gz
# 解压
tar -zxvf apache-seatunnel-2.3.6-bin.tar.gz
cd apache-seatunnel-2.3.6
💡 提示:解压后目录结构:
bin/ # 启动脚本 config/ # 默认配置 connectors/ # 所有连接器插件(关键!) lib/ # 核心 JAR 包
三、编写第一个同步任务:MySQL → Console(打印到屏幕)
我们将模拟从 MySQL 读取数据,并输出到控制台(用于测试)。
步骤 1:准备测试数据(可选)
如果你没有 MySQL,可用内存数据源 FakeSource 快速测试:
# config/fake_to_console.conf
env {
execution.parallelism = 1
job.mode = "BATCH"
}
source {
FakeSource {
result_table_name = "fake"
row.num = 10
schema = {
fields {
name = "string"
age = "int"
}
}
}
}
transform {
# 可选:字段转换、过滤等
}
sink {
Console {
source_table_name = "fake"
}
}
步骤 2:运行任务
# 使用自带的 local 模式(无需 Spark/Flink 集群)
bin/seatunnel.sh --config config/fake_to_console.conf
✅ 成功输出类似:
{"name":"name_0","age":0}
{"name":"name_1","age":1}
...
🎉 恭喜!你已成功运行第一个 SeaTunnel 任务!
四、实战:MySQL → Doris(真实场景)
假设你有:
- MySQL 表
users(id, name, email) - Doris 表
ods_users(id, name, email)
1. 准备连接器插件
SeaTunnel 的连接器以插件形式存在。确保以下 JAR 存在于 connectors/ 目录:
connector-jdbc-mysql-*.jarconnector-doris-*.jar
如果没有,可从 官方 Release 页面 下载对应版本的
connector-bundle,或单独编译。
2. 编写配置文件 mysql_to_doris.conf
env {
job.mode = "BATCH"
execution.parallelism = 2
}
source {
Jdbc {
driver = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/test_db"
username = "root"
password = "123456"
query = "SELECT id, name, email FROM users"
result_table_name = "mysql_data"
}
}
sink {
Doris {
fenodes = "127.0.0.1:8030"
username = "root"
password = ""
database = "example_db"
table = "ods_users"
source_table_name = "mysql_data"
doris.config = {
format = "json"
read_json_by_line = true
}
}
}
🔍 注意:
- 使用 HOCON 格式(兼容 JSON/YAML)
result_table_name是中间表名,用于连接 source 和 sink
3. 运行任务
bin/seatunnel.sh --config config/mysql_to_doris.conf
观察日志,若看到 Job Complete 即表示同步成功!
五、常见问题排查
| 问题 | 解决方案 |
|---|---|
ClassNotFoundException: com.mysql.cj.jdbc.Driver |
将 MySQL JDBC 驱动 JAR 放入 lib/ 目录 |
| 连接 Doris 失败 | 检查 FE 的 HTTP 端口(默认 8030),非 MySQL 端口 |
| 任务卡住不动 | 查看 logs/ 下的日志文件,确认是否缺少插件 |
| 字段类型不匹配 | 在 transform 中使用 FieldMapper 或 TypeConvert |
六、进阶建议
-
使用 Flink 引擎 :生产环境推荐搭配 Flink 实现高吞吐流式同步。
bin/seatunnel.sh --config xxx.conf --engine flink -
监控与调度:结合 DolphinScheduler、Airflow 实现任务调度。
-
自定义插件:通过 SeaTunnel SDK 开发私有数据源。
-
性能调优 :调整
parallelism、批大小、JVM 参数等。
七、结语
Apache SeaTunnel 以 极简配置 + 强大生态 + 企业级能力,正在成为新一代数据集成的事实标准。无论你是数据工程师、ETL 开发者,还是架构师,掌握 SeaTunnel 都能极大提升数据管道的开发效率与稳定性。