DolphinScheduler使用seatunnel 同步数据库

1. 安装 DolphinScheduler

在演示环境中,我们采用单机部署方式。具体步骤可参考官方文档:https://dolphinscheduler.apache.org/zh-cn/docs/3.4.2/guide/installation/standalone。

启动 DolphinScheduler Standalone Server

DolphinScheduler 的二进制压缩包中已包含 standalone 启动脚本,解压后即可快速启动。

bash 复制代码
# 解压并运行 Standalone Server
tar -xvzf apache-dolphinscheduler-*-bin.tar.gz
chmod -R 755 apache-dolphinscheduler-*-bin
cd apache-dolphinscheduler-*-bin
bash ./bin/dolphinscheduler-daemon.sh start standalone-server

2. 安装 SeaTunnel

官方下载地址:https://seatunnel.apache.org/download/

使用 wget 将安装包下载到服务器后解压。

安装前准备

  1. 确认 SeaTunnel 版本与 JDK 环境:确保系统已安装兼容的 JDK。
  2. 下载并解压 SeaTunnel 安装包
  3. 配置 SEATUNNEL_HOME 环境变量:指向 SeaTunnel 的解压目录。
  4. 安装连接器插件:参考文档 https://doc.seatunnel-web.com/8677563m0。

加载连接器驱动

如果任务中使用了 MySQL、Oracle、PostgreSQL 等数据源,需要准备对应的数据库驱动。

通常需要将驱动包(如 .jar 文件)放到 SeaTunnel 对应的插件目录中,例如:

  • ${SEATUNNEL_HOME}/lib/
  • 或对应连接器插件目录下。

注意:如果任务启动时报"找不到驱动"、"无法加载 Driver Class"等错误,通常是因为连接器驱动没有放置到正确位置。

MySQL 连接器驱动下载地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/

3. 配置与任务执行

在 DolphinScheduler 中添加任务

  1. 在 DolphinScheduler 中添加任务定义。
  2. 任务类型选择"数据集成" -> "seatunnel"。

执行模式选择

重要:执行时请选择"Cluster 执行"。如果选择本地执行,CDC(Change Data Capture)任务可能会被阻塞。

SeaTunnel 任务配置示例

以下是一个 MySQL CDC 同步到 MySQL 的配置示例:

bash 复制代码
env {
  parallelism = 1
  job.mode = "STREAMING"
  checkpoint.interval = 10000
}

source {
  MySQL-CDC {
    url = "jdbc:mysql://172.32.1.26:3306/seatunnel?useSSL=false&serverTimezone=Asia/Shanghai"
    username = "root"
    password = "root123"
    table-names = ["seatunnel.role"]
  }
}

sink {
  Jdbc {
    url = "jdbc:mysql://172.32.1.26:3306/seatunnel?useSSL=false&serverTimezone=Asia/Shanghai"
    driver = "com.mysql.cj.jdbc.Driver"
    username = "root"
    password = "root123"
    generate_sink_sql = true
    database = "seatunnel"
    table = "ods_role"
    primary_keys = ["id"]
    batch_size = 1000
  }
}

任务管理命令

bash 复制代码
# 查看当前运行的任务
$SEATUNNEL_HOME/bin/seatunnel.sh -l

# 停止任务(两种方式)
# 1. 优雅停止(保留状态,可恢复)
$SEATUNNEL_HOME/bin/seatunnel.sh -can <jobId>

# 2. 强制取消(不保留状态)
$SEATUNNEL_HOME/bin/seatunnel.sh -f <jobId>