基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步

本次演示将结合 Apache SeaTunnel 与 Apache DolphinScheduler,实现一个典型的离线增量同步场景:通过 DolphinScheduler 获取目标端同步位点,并将该位点作为参数传递给 SeaTunnel,从而实现 MySQL 到 Doris 的增量数据同步。

本文基于实际演示过程整理,完整记录环境准备、SeaTunnel 配置以及 DolphinScheduler 工作流配置过程。

具体操作步骤可参考完整 Demo 演示:

一、实验环境

本案例使用以下组件:

组件版本
Apache SeaTunnel2.3.9
Apache DolphinScheduler3.x
MySQL8.4
Apache Doris2.x

其中:

  • MySQL 作为源数据库;
  • Doris 作为目标数据库;
  • SeaTunnel 负责数据同步;
  • DolphinScheduler 负责任务编排与调度。

二、准备测试数据

在开始配置同步任务之前,首先准备测试环境中的业务数据。

演示中使用 shopping 数据库作为示例库,并创建订单表 orders。

订单表中包含一个自增的订单主键字段:

order_id

后续增量同步将以该字段作为同步位点。

为了验证同步效果,演示环境中预先插入了一批测试数据,并通过脚本批量生成约 300 条订单记录。

随后查看表中的数据情况,包括:

  • 当前订单总数;
  • 当前最大订单 ID。

这些数据将在后续配置增量同步逻辑时作为参考。

需要说明的是,本案例选择 order_id 作为增量字段只是为了便于演示。在实际业务场景中,也可以使用 update_time、create_time 等时间字段作为增量同步条件。

三、增量同步实现思路

在正式配置 SeaTunnel 之前,演示首先介绍了整个增量同步方案的实现逻辑。

核心思路是利用目标端 Doris 中已经同步完成的数据来确定当前同步进度。

具体流程如下:

  1. 查询 Doris 当前最大的订单 ID;
  2. 将该值作为同步位点;
  3. SeaTunnel 从 MySQL 中读取大于该值的数据;
  4. 将新增数据写入 Doris;
  5. 下一次同步时继续从新的位点开始读取。

例如:

如果 Doris 当前最大的订单 ID 为:

300

那么 SeaTunnel 实际执行的查询条件将变成:

WHERE order_id > 300

这样可以保证每次任务只处理新增数据,而不会重复同步已经存在的数据。

演示中也特别提到,增量字段并不一定是主键字段,只要能够准确标识新增数据或变更数据即可。

四、编写 SeaTunnel 配置

完成同步思路说明后,开始配置 SeaTunnel 作业。

配置 JDBC Source

由于数据来源于 MySQL,因此使用 JDBC Source 读取数据。

核心查询语句如下:

SELECT * FROM orders WHERE order_id > ${order_id}

这里最关键的部分是:

${order_id}

该变量并不是固定值,而是后续由 DolphinScheduler 动态传递。

当工作流运行时,SeaTunnel 会根据实际同步位点自动替换该参数,从而实现增量抽取。

配置并行度

演示中同时配置了任务并行度:

parallelism = 4

通过增加并行度,可以提高同步任务的执行效率。

实际生产环境中应根据服务器资源以及数据库负载情况进行合理调整。

配置分区读取

为了提高大表读取效率,演示中还介绍了分区读取配置。

分区字段使用:

order_id

对应配置:

partition_column = "order_id"

同时配合 partition_num 参数,将数据划分为多个分区并行读取。

这种方式能够有效提升大数据量场景下的同步性能。

配置 Fetch Size

在 JDBC Connector 中,还可以通过 fetch_size 控制单次从数据库获取的数据量。

合理设置该参数能够减少数据库交互次数,从而提高整体读取效率。

五、配置 Doris Sink

完成 Source 配置后,开始配置 Doris Sink。

自动建表能力

演示中首先介绍了:

create_schema

该参数用于自动创建目标表。

通过自动建表能力,可以减少人工维护 Doris 表结构的工作量。

配置写入模式

由于本案例采用增量同步,因此选择追加写入模式:

save_mode = APPEND_DATA

之所以使用 APPEND_DATA,是因为每次同步的都是新增数据,不需要覆盖历史记录。

开启两阶段提交

为了保证数据一致性,演示还介绍了:

enable_2pc = true

开启后可以利用两阶段提交机制,实现更可靠的数据写入过程。

同时有助于保障 Exactly Once 语义。

性能相关参数

此外,演示还讲解了多个性能优化参数,包括:

batch_size

以及:

buffer_size

这些参数主要用于控制数据批量写入行为,从而提升 Doris 导入性能。

Create Table Template

对于自动建表场景,演示还展示了 Create Table Template 的配置方式。

其中包括:

UNIQUE KEY(order_id)

以及:

DISTRIBUTED BY HASH(order_id)

同时还可以配置:

  • 副本数;
  • 压缩格式;
  • 是否启用内存存储;
  • 其他 Doris 表属性。

通过模板配置,可以让 SeaTunnel 自动生成符合业务需求的目标表结构。

六、配置 DolphinScheduler 运行环境

完成 SeaTunnel 配置后,开始配置 DolphinScheduler。

创建租户