https://www.cnblogs.com/xibuhaohao/articles/19068912 - seatunnel-安装部署测试

https://www.cnblogs.com/xibuhaohao/articles/19068914 - seatunnel-MySQL to MySQL JDBC 测试

版本:apache-seatunnel-2.3.8

1. SeaTunnel MySQL-CDC 单表迁移 Job 配置(全量 + 增量同步)

基于你的需求,将原 JDBC 批处理单表同步 改造为 MySQL-CDC 整库迁移(全量快照 + 增量 binlog 同步),核心实现:
  1. 源端用 MySQL-CDC Source 捕获 db50000000.ods_goods_goods_store_info_da 库表的全量数据 + 增量变更(支持整库多表自动匹配);
  2. 目标端用 Jdbc Sink 动态写入 db_all 库的对应表 ods_goods_goods_store_info_da ;
  3. 保留 Exactly-Once 语义,确保整库数据一致性。

2. 完整 Job 配置文件(mysql-to-mysql-cdc.conf)

[root@zb-yunweitest-mysql-204-201 apache-seatunnel-2.3.8]# cat job/mysql-to-mysql-cdc.conf 
env {
  # You can set engine configuration here
  parallelism = 2
  job.mode = "STREAMING"
  checkpoint.interval = 5000
  read_limit.bytes_per_second=7000000
  read_limit.rows_per_second=400
}

source {
  MySQL-CDC {
    server-id = 5652-5653
    username = "root"
    password = "HkZiWdDba159+-*%"
    table-names = ["db50000000.ods_goods_goods_store_info_da"]
    base-url = "jdbc:mysql://172.21.204.200:3306/db50000000"
    # 4. 明确启动模式:优先用initial(全量+增量),确认全量是否有数据
    scan.startup.mode = "initial"
    debezium = {
      include.schema.changes = true
    }
  }
}

sink {
  jdbc {
    url = "jdbc:mysql://172.21.204.201:3306/db_all"
    driver = "com.mysql.cj.jdbc.Driver"
    user = "root"
    password = "HkZiWdDba159+-*%"
    generate_sink_sql = true
    database = db_all
    table = ods_goods_goods_store_info_da
    primary_keys = ["id"]
    is_exactly_once = true                                                  # 开启事务,确保全量+增量数据不重复、不丢失
    xa_data_source_class_name = "com.mysql.cj.jdbc.MysqlXADataSource"       # MySQL 专属 XA 数据源(必配)
  }
}

3. 关键改造点说明(从单表 JDBC 到整库 CDC)

3.1. 源端:从 Jdbc 改为 MySQL-CDC(核心差异)

改造项原 JDBC 单表配置新 MySQL-CDC 整库配置原因说明
源类型 Jdbc MySQL-CDC CDC 支持全量快照 + 增量 binlog,满足整库迁移 “一次全量 + 持续增量” 需求
表指定方式 query = select * from 单表 database-name + table-list 整库迁移需指定数据库 + 多表,而非单表查询
核心参数 driver/query server-id/scan.startup.mode CDC 依赖 binlog,需 server-id 标识客户端,startup.mode 控制全量 / 增量
数据捕获范围 批处理全量(一次性) 全量快照 + 增量 binlog(持续同步) 整库迁移需保证数据实时性,避免批处理导致的增量遗漏

3.2. 流处理模式:job.mode 从 BATCH 改为 STREAMING

  • 原配置是 批处理(仅同步一次全量数据),整库迁移需 持续捕获增量变更(如源表新增 / 更新数据),因此必须改为 STREAMING 模式;
  • 新增 checkpoint.interval:流处理通过 checkpoint 保存 CDC 增量位点(binlog 文件名 + 位置),即使任务重启,也能从上次断点继续同步,避免重复消费。

3.3. 依赖与环境检查(确保 CDC 正常运行)

(1)必须存在的 Connector 依赖

你的 connectors 目录中已包含 connector-cdc-mysql-2.3.8.jar(关键),无需额外下载;若缺失,需从 SeaTunnel 官网下载对应版本的 CDC 连接器。

(2)源库 binlog 配置检查(CDC 运行前提)

MySQL 源库(172.21.204.200)必须开启 binlog,且配置符合要求,否则 CDC 无法捕获变更:
  1. 登录源库执行以下命令,检查 binlog 状态:
    show variables like 'log_bin';         # 需返回 ON
    show variables like 'binlog_format';   # 需返回 ROW(CDC 仅支持 ROW 格式)
    show variables like 'server_id';       # 需大于 0(源库自身的 server-id)
  2. 若未开启,需修改 MySQL 配置文件(如 my.cnf),重启数据库:
    log_bin = mysql-bin          # 开启 binlog
    binlog_format = ROW          # 必须为 ROW 格式
    server_id = 100              # 源库 server-id(不可与 CDC 的 server-id 重复)
    binlog_row_image = FULL      # 捕获全量行数据(避免字段缺失)
    expire_logs_days = 7         # binlog 保留 7 天(确保全量快照期间 binlog 不被删除)

4. 执行命令(Zeta 引擎,整库迁移推荐)

# 进入 SeaTunnel 根目录
cd /data/dba/seatunnel/apache-seatunnel-2.3.8

# 执行整库 CDC 迁移任务(Zeta 引擎本地模式,-e local 必选)
./bin/seatunnel.sh --config ./job/mysql-to-mysql-cdc-full-db.conf -e local

5. 整库迁移验证与监控

  1. 全量同步验证:任务启动后,查看目标库 db_all,会自动创建 ods_goods_goods_sku_rt/ods_goods_goods_spu_rt/ods_goods_goods_store_info_da 三张表,且数据与源库一致;
  2. 增量同步验证:在源库 db50000000 的任意表中插入 / 更新一条数据,观察目标库对应表是否实时同步;
  3. 日志监控:若任务中断,查看日志中关键词 CDC/binlog/XA transaction,定位问题(如 binlog 格式错误、主键缺失)。

6. 常见问题处理

  1. CDC 连接失败:server-id already in use
    • 原因:server-id = 1001 与其他 CDC 客户端(如 Canal、Debezium)重复;
    • 解决:修改 server-id 为 1-65535 之间的未使用值(如 1002)。
  2. 目标库表未创建:Table not found
    • 原因:schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST" 未生效,或源表无主键;
    • 解决:确保目标库用户有 CREATE TABLE 权限,且源表均有主键(CDC 同步 UPDATE/DELETE 依赖主键)。
  3. 全量快照缓慢:snapshot chunk size too small
    • 原因:scan.incremental.snapshot.chunk.size 过小,分块过多;
    • 解决:调大该参数(如 200000),但需确保 SeaTunnel 内存充足(建议 JVM 堆内存 ≥ 4G)。

 

 posted on 2025-09-02 14:03  xibuhaohao  阅读(30)  评论(0)    收藏  举报