最佳实践:基于Apache SeaTunnel从MySQL同步到PostgreSQL

news/2025/10/15 16:24:28/文章来源:https://www.cnblogs.com/seatunnel/p/19143651

作者 | 陈飞 中付支付大数据工程师

今天和大家分享一个 简单但常见的 MySQL 到 MySQL 数据同步与合并场景案例,这个案例也是我在实际工作中遇到的问题,希望能抛砖引玉,欢迎有更丰富经验的大佬一起分享交流。

  • 版本要求:Apache SeaTunnel --> Apache SeaTunnel-2.3.9

场景描述

在我们的业务系统中,存在两个 MySQL 源库:

  • source_a
  • source_b

这两个库中存在一张表结构相同的表,但数据来自不同的业务线,两边都会同时产生数据,因此存在 主键重复 的问题。

我们的目标是将这两个源库的表数据 合并同步到一个目标库(我们称为 C 库),以便于统一分析和查询。

面临的挑战

  • 两个源库的表结构虽然一致,但主键重复,需要避免冲突
  • 后续可能存在字段不一致或字段新增的需求
  • 同步过程需尽量实时,且不能产生重复数据

解决方案

我们采用了如下方式来实现这个同步与合并的方案:

在 C 库新建目标表:

  • 表结构需要覆盖两个源表的所有字段(当前一致,未来可能扩展)
  • 增加一个额外的字段:data_source,用于标识数据来源(source_a 或 source_b)
  • 不可为空的字段需要有默认值

设置联合主键与唯一约束

  • 使用 原主键 + data_source 作为联合主键,确保不会因为两个源的主键重复而导致冲突

使用两个 Seatunnel 进程进行数据同步**:

  • 分别使用 MySQL CDC 连接器 监听 source_a 与 source_b
  • 在每条数据中打上来源标识字段 data_source
  • 使用 JDBC Sink 写入到 C 库

实战演示

下面我们直接进入实战环节,关于 SeaTunnel 的基础知识,这里就不再赘述,上一期的大佬已经讲得非常清楚了,我们直接进入正题。

使用 MySQL CDC 前的准备工作

要使用 mysql-cdc 连接器,有两个必要的前置条件:

  • MySQL 源库需开启 Binlog 日志
    • binlog_format 必须设置为 ROW
    • binlog_row_image 设置为 FULL-- 检查当前配置
SHOWVARIABLESLIKE'binlog_format';
SHOWVARIABLESLIKE'binlog_row_image';-- 如果未开启,可在 my.cnf 文件中添加以下配置:
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
binlog-row-image = FULL

以上权限说明及设置方式可以参考官网文档,文档中提供了详细的权限说明与示例,建议大家同步查阅。

  • 准备拥有复制权限的账号

-- 创建同步账号
CREATE USER 'cdc_user'@'%' IDENTIFIED BY 'your_password';-- 授予必要权限
GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'cdc_user'@'%';
FLUSH PRIVILEGES;

准备 SeaTunnel 运行包与插件

  • 方式一:下载官方二进制包

适合 服务器可访问外网 且 无需复杂定制 的场景。

  • 下载地址:官方 Releases 页面
  • 需要手动添加插件及插件驱动(如 mysql-cdc, jdbc)
  • 插件安装说明可参考官方文档:插件管理
wget "https://archive.apache.org/dist/seatunnel/${version}/apache-seatunnel-${version}-bin.tar.gz"config/plugin_config保留需要的插件bin/install-plugin.sh
  • 方式二:从 GitHub 克隆源码自行编译

适合对插件有特殊需求或希望获得完整插件支持的用户。

sh ./mvnw clean install -DskipTests -Dskip.spotless=trueseatunnel-dist/target/apache-seatunnel-2.3.9-bin.tar.gz

自行编译后生成的包中默认已集成所有插件及对应依赖,无需额外操作。

本案例使用的插件:

  • mysql-cdc
  • jdbc

插件说明与驱动依赖也可参考对应的文档!

Apache SeaTunnel 部署方式简介

SeaTunnel 支持多种部署方式:

  • 使用 Seatunnel 自带引擎(Zeta)
  • 作为 Spark / Flink 作业运行

使用 Zeta 引擎时的三种模式:

配置文件结构说明

集群搭建完成后,我们开始准备配置文件。

一般情况下,SeaTunnel 的配置文件可以分为以下四个部分:

  • Env:引擎相关配置
  • Source:源数据读取配置
  • Transform:数据转换信息(可选)
  • Sink:写出目标库的配置

Env引擎配置

  • parallelism:并行度,表示任务运行的并发度,数值越大越快,具体要结合资源情况设置。
  • job.mode:作业运行模式。由于我们使用的是 mysql-cdc 插件,因此必须设置为 Streaming 模式。
  • checkpoint.interval:检查点间隔,Streaming 模式下默认是 30 秒一次,可以根据需要调整。

Source数据源配置(MySQL CDC)

使用的插件是 mysql-cdc,需要配置以下内容:

  • 连接信息:包括数据库地址、用户名、密码等。
  • 库名与表名:可以通过 database-names 和 table-names 显式指定,也可以使用正则表达式模糊匹配。
  • startup.mode:CDC 的启动模式,默认为“先全量后增量”,适合大多数同步场景。如需了解其他启动模式的区别,可以参考官方文档。
  • server-id:MySQL 的 CDC 读取服务 ID,虽然可以不写,但建议明确指定,防止与已有的从库 ID 冲突。
  • MySQL 配置建议:在使用 mysql-cdc 前,需要确保
    • binlog 功能已开启;
    • binlog-format 设置为 ROW;
    • binlog-row-image 设置为 FULL;
    • MySQL 账号需具备读取 binlog、主从复制、查询所有表等权限。

Transform数据转换配置(可选)

在本案例中,我们需要给每条数据添加一个字段,用于标识数据来源,例如:data_source 字段,值可以是 source_a 或 source_b。

这个转换过程使用 sql 插件实现,通过添加常量字段的方式,将数据来源信息加到每条数据中。

需要注意:

  • 每个源表可以单独指定转换规则;
  • source_table 是保留字,表示上一个处理环节中的表名。

Sink写入配置

Sink 使用的是 jdbc 插件,配置项主要包括:

  • 目标库地址、驱动、用户名、密码等连接信息;
  • 根据目标表结构生成写入 SQL;
  • 如果字段或结构不一致,可以自定义写入语句以匹配表结构。

小结

以上配置组合完成后,我们就可以实现从多个源库(如 source_a 和 source_b)实时同步数据到目标库的需求。在同步的同时,我们还增强了字段,使数据能够被标识来源并统一写入。整个流程既支持复杂数据结构,又能灵活适配业务场景,是一个适合实际生产的数据集成案例。

Sink 写入优化与效果验证

在配置 Sink 时,我们还可以做一些写入性能方面的优化:

批量写入策略

  • 批量大小 和 写入间隔:满足任意一个条件就会触发写入操作。

关键配置参数说明

  • schema_save_mode:结构保存策略如果结构已存在则忽略;
    • 如果不存在,则根据上一个环节的输出结构自动创建。
  • data_save_mode:数据保存策略
    • 这里我们选择的是 追加(append) 模式。
  • support_upsert_by_query_primary_key_exist:是否支持根据主键做 Upsert
    • 本次开启了该功能,用于支持主键冲突时的更新。
  • primary_keys:指定写入数据的主键
    • 这里必须指定,包括原表的主键和我们 transform 阶段新增的 data_source 字段。

提交任务

./seatunnel.sh --config ../config/demo/collect_a.config -e cluster --cluster sz-seatunnel --name collect_a --async
./seatunnel.sh --config ../config/demo/collect_b.config -e cluster --cluster sz-seatunnel --name collect_b --async--config:指定配置文件
-e:运行模式 cluster/local
--cluster:集群名称,部署集群时配置,默认是seatunnel
--name:任务名称
--async:后台运行

实际运行效果验证

到这里,配置部分就全部完成了。接下来我们来看下实际运行的效果:

  1. 当前有 a 表和 b 表,c 表为空。
  2. 先运行 a 的同步进程。
  • 查看 c 表,已经写入了 a 表的数据,且 data_source 字段为 source_a。
  1. 接着运行 b 的同步进程。
  • 再查看 c 表,写入了 b 表的数据,data_source 字段为 source_b。
  1. 修改一下 a 表的数据。
  • 因为我们设置了批量写入策略,这里等个两秒,再去看 c 表。
  • 对应的数据已更新,符合预期。

到这里整个数据同步和合并的流程就全部完成啦!非常感谢大家的聆听 🙏,希望这个案例能为大家提供一些思路,也欢迎大家分享自己在 Apache SeaTunnel 使用中的更多经验,我们一起交流学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/937622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头实力解析

2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头实力解析随着制造业的转型升级,冲压件作为基础零部件在工业生产中的地位日益凸显。特别是在新能源、光伏、汽车制造等新兴…

完整教程:PaVeRL - SQL:基于部分匹配奖励与语言强化学习的 Text-to-SQL 技术

完整教程:PaVeRL - SQL:基于部分匹配奖励与语言强化学习的 Text-to-SQL 技术pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

2025年抖音推广服务商最新权威推荐榜:专业运营团队与高转化率方案深度解析,助力品牌精准引流与爆款打造

2025年抖音推广服务商最新权威推荐榜:专业运营团队与高转化率方案深度解析,助力品牌精准引流与爆款打造在数字化营销浪潮中,抖音作为短视频领域的领军平台,已成为品牌营销不可或缺的阵地。随着用户规模突破8亿,日…

基于模糊深度信念网络(FDBN)的情感分析实现与优化

一、FDBN模型架构设计 1. 核心组件 graph TDA[输入层] --> B[模糊化模块]B --> C[深度信念网络]C --> D[情感分类层]subgraph 模糊化模块B1(模糊特征提取) --> B2(隶属度计算)B2 --> B3(模糊规则推理)e…

2025年卷板机厂家综合推荐榜:折弯机/液压机厂家助力制造业智能化升级

随着制造业向智能化、自动化方向快速发展,传统加工设备正面临转型升级的关键时期。卷板机作为金属加工行业的核心设备,其精度、效率和稳定性直接影响到产品质量和生产成本。为帮助企业在众多厂家中精准定位适合自身需…

Python 实现 Ping 功能

【生活经历分享】华师国培 华师伴学 合同都是坑 消费者付款后无法退款和华师国培签合同需小心,合同中都是保护华师的条款,没有保护消费者的条款。收到钱,就算你因对培训质量不满意,也不能退款。因合同消费者维权肯…

2025年焊接机器人厂家最新权威推荐榜:激光/自动/智能/工业/国产焊接机器人系统、机器人焊接设备、汽车/钢结构/氩弧焊焊接机器人公司精选

2025年焊接机器人厂家最新权威推荐榜:激光/自动/智能/工业/国产焊接机器人系统、机器人焊接设备、汽车/钢结构/氩弧焊焊接机器人公司精选行业背景与发展趋势随着制造业转型升级步伐加快,焊接机器人产业正迎来前所未有…

2025年保洁公司最新权威推荐榜单:专业家政服务与深度清洁口碑优选,家庭保洁、企业保洁、开荒保洁全方位解析

2025年保洁公司最新权威推荐榜单:专业家政服务与深度清洁口碑优选,家庭保洁、企业保洁、开荒保洁全方位解析行业背景与发展趋势随着城市化进程加速和居民生活水平提升,中国保洁服务行业正迎来前所未有的发展机遇。据…

C语言学习——变量

一.首先我们需要知道的是变量的定义格式 图1 > 变量的定义格式是由数据类型和变量名来表示的 > 数据类型有三种分别是整数 小数 字符串 > 同时变量名的命名也有一些规则如下: 标识符的命名规则 标识符就是代…

RabbitMQ投递回调机制以及策略业务补偿

————以点赞消息案例为例一、关于RabbitMQ回调机制知识点补充: https://www.cnblogs.com/Mr-Keep/p/19140274 在 RabbitMQ 中,生产者发送消息后,有可能遇到以下几种情况:消息成功投递到交换机(Exchange)消息未…

2025年大连媒体投放公司最新权威推荐榜:覆盖传统媒体/新媒体/户外广告投放的优质服务商深度解析

2025年大连媒体投放公司最新权威推荐榜:覆盖传统媒体/新媒体/户外广告投放的优质服务商深度解析在数字化转型加速的今天,媒体投放行业正经历着深刻变革。大连作为东北亚重要的经济中心,其媒体投放市场呈现出多元化发…

显卡参数对算力性能的影响

AI时代大模型的应用已经渗透到日常的角角落落,同时算力变成了普遍的需求,在购买显卡或者租用GPU云算力的时候,如何选择合适的显卡呢,需要关注哪些参数? 本文以最常见的英伟达显卡为例,来说说显卡的各种参数是如何…

多物理域协同 + 三维 CAD 联动!ADS 2025 解锁射频前端、天线设计新体验

Advanced Design System 2025(ADS 2025)是Keysight公司推出的一款领先的射频、微波和毫米波电路设计与仿真软件。它集成了从原理图设计、电磁仿真到版图验证的全流程解决方案,支持多物理域协同设计,能精准模拟射频…

MySQL—— 备份与恢复

MySQL—— 备份与恢复备份类型核心工具/方法主要特点适用场景​逻辑备份​mysqldump, mysqlpump备份为SQL脚本,可读性强,但备份和恢复速度较慢​数据量小、跨版本/平台迁移、需要查看备份内容​物理备份​​Percona …

win10自带锁屏壁纸和Windows聚焦壁纸路径

Windows 10自带的锁屏界面和背景界面的美图获取1.Win10自带锁屏“图片”文件路径 C:\Windows\Web\Screen 这里的文件没有后缀名,可以复制后添加.JPG或者.PNG后缀可以使用有16进制模式的编辑器查看(比如UltraEdit),…

读书笔记:时间间隔类型:轻松管理时长与时间点

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

2025 年最新推荐!除尘器厂家权威排行榜发布,深度解析各品牌技术实力与市场口碑

当前工业领域对环保要求持续提升,除尘器作为控制粉尘排放、保障环境达标排放的核心设备,其质量与性能直接影响企业生产合规性与运营成本。然而市场上除尘器品牌数量众多,产品质量参差不齐,部分品牌存在除尘效率低、…

实用指南:【Git】项目管理全解

实用指南:【Git】项目管理全解2025-10-15 15:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

在浏览器播放多个视频 opencv+Nicegui

效果图代码: from nicegui import ui, native import cv2 import numpy as np import base64 import time import threading import osclass VideoStream:"""单个视频流管理类"""def _…

WSL2内部挂载NFS共享文件夹

启动NFS服务端 sudo systemctl start nfs-server 编辑/etc/exports可以新增共享目录,下面是例子 # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(…