Apache SeaTunnel 中的 Schema Evolution 功能详解

Apache SeaTunnel 中的 Schema Evolution 功能详解

seatunnel SeaTunnel是一个开源的数据集成工具,主要用于从各种数据源中提取数据并将其转换成标准格式。它的特点是易用性高、支持多种数据源、支持流式处理等。适用于数据集成和数据清洗场景。 seatunnel 项目地址: https://gitcode.com/gh_mirrors/se/seatunnel

什么是 Schema Evolution

Schema Evolution(模式演进)是数据工程领域的一个重要概念,它指的是数据表结构能够动态变化,而数据同步任务可以自动适应新表结构的变化,无需人工干预其他操作。在 Apache SeaTunnel 中,这一功能使得数据管道能够智能地处理源表和目标表结构的变化,大大简化了数据同步流程的维护工作。

核心特性

支持的引擎

目前 Schema Evolution 功能仅在 Zeta 引擎中得到支持。

支持的模式变更类型

Apache SeaTunnel 能够识别和处理以下四种表结构变更事件:

  1. ADD COLUMN:新增列
  2. DROP COLUMN:删除列
  3. RENAME COLUMN:重命名列
  4. MODIFY COLUMN:修改列属性

支持的连接器组合

源端连接器
  • MySQL CDC
  • Oracle CDC
目标端连接器
  • JDBC 系列:MySQL、Oracle、PostgreSQL、Dameng、SQL Server
  • StarRocks
  • Doris
  • Paimon
  • Elasticsearch

使用注意事项

  1. 转换限制:目前不支持在不同类型数据库之间(如 Oracle-CDC 到 Jdbc-Mysql)进行模式演进时处理列的默认值。

  2. Oracle-CDC 特殊限制

    • 不能使用 SYSSYSTEM 用户名修改表结构,否则 DDL 事件会被过滤导致模式演进失效
    • 表名以 ORA_TEMP_ 开头的表也会遇到同样问题
  3. Dameng 数据库限制:早期版本的 Dameng 数据库不支持将 Varchar 类型字段修改为 Text 类型。

启用 Schema Evolution

Schema Evolution 在 CDC 源端默认是禁用的,需要通过配置 schema-changes.enabled = true 来显式启用。这个配置仅适用于 CDC 源端连接器。

配置示例解析

MySQL-CDC 到 Jdbc-Mysql 配置

env {
  parallelism = 5
  job.mode = "STREAMING"
  checkpoint.interval = 5000
}

source {
  MySQL-CDC {
    server-id = 5652-5657
    username = "st_user_source"
    password = "mysqlpw"
    table-names = ["shop.products"]
    base-url = "jdbc:mysql://mysql_cdc_e2e:3306/shop"
    schema-changes.enabled = true  # 关键配置
  }
}

sink {
  jdbc {
    url = "jdbc:mysql://mysql_cdc_e2e:3306/shop"
    driver = "com.mysql.cj.jdbc.Driver"
    user = "st_user_sink"
    password = "mysqlpw"
    generate_sink_sql = true
    database = shop
    table = mysql_cdc_e2e_sink_table_with_schema_change_exactly_once
    primary_keys = ["id"]
    is_exactly_once = true
    xa_data_source_class_name = "com.mysql.cj.jdbc.MysqlXADataSource"
  }
}

这个配置展示了如何设置一个从 MySQL 到 MySQL 的 CDC 同步任务,并启用了 Schema Evolution 功能。当源表结构发生变化时,目标表会自动同步这些变化。

Oracle-CDC 到 StarRocks 配置

sink {
  StarRocks {
    nodeUrls = ["starrocks_cdc_e2e:8030"]
    username = "root"
    password = ""
    database = "shop"
    table = "${table_name}"
    schema_save_mode="RECREATE_SCHEMA"
    data_save_mode="DROP_DATA"
    save_mode_create_template = """
    CREATE TABLE IF NOT EXISTS shop.`${table_name}` (
        ${rowtype_primary_key},
        ${rowtype_fields}
        ) ENGINE=OLAP
        PRIMARY KEY (${rowtype_primary_key})
        DISTRIBUTED BY HASH (${rowtype_primary_key})
        PROPERTIES (
                "replication_num" = "1",
                "in_memory" = "false",
                "enable_persistent_index" = "true",
                "replicated_storage" = "true",
                "compression" = "LZ4"
          )
    """
  }
}

这个示例展示了如何配置 StarRocks 作为目标端,并提供了表创建模板。当源表结构变化时,StarRocks 表会按照模板重新创建。

最佳实践建议

  1. 测试环境验证:在生产环境使用前,先在测试环境验证 Schema Evolution 的行为是否符合预期。

  2. 监控机制:建立完善的监控机制,及时发现和处理模式变更可能引发的问题。

  3. 版本兼容性:注意不同数据库版本对模式变更的支持程度可能不同。

  4. 备份策略:在进行重大模式变更前,建议先备份数据。

  5. 性能考量:频繁的模式变更可能会影响同步性能,需要评估业务需求。

通过合理配置 Apache SeaTunnel 的 Schema Evolution 功能,可以显著降低数据同步任务的维护成本,提高数据管道的灵活性和可靠性。

seatunnel SeaTunnel是一个开源的数据集成工具,主要用于从各种数据源中提取数据并将其转换成标准格式。它的特点是易用性高、支持多种数据源、支持流式处理等。适用于数据集成和数据清洗场景。 seatunnel 项目地址: https://gitcode.com/gh_mirrors/se/seatunnel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虞旋律

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值