乐趣区

关于数据库:Apache-SeaTunnel-233-版本发布CDC-支持-Schema-Evolution

时隔两个月,Apache SeaTunnel 终于迎来大版本更新。此次公布的 2.3.3 版本在性能和性能上均有较大优化改良,其中大家期待已久的 CDC Schema evolution(DDL 变更同步)、主键 Split 拆分、JDBC Sink 主动建表性能、SeaTunnel Zeta 引擎反对 作业配置反对变量替换和传参等都是更新的亮点。这些性能和优化使得 Apache SeaTunnel 具备了更弱小的数据同步能力,大幅晋升了 SeaTunnel 的性能。本文将具体介绍本次更新的具体情况。

CDC 相干更新

反对 Schema evolution

对于 CDC 方面的重要更新,是在架构层面反对了 Schema evolution(DDL 变更同步),这是从架构层面对 DDL 变更事件进行了形象,包含 Source 和 Sink 中相干接口的增加。另外,咱们在 Zeta 引擎中增加了 DDL 变更事件与 checkpoint 相干的解决流程。至此,在架构层面,SeaTunnel 曾经满足了反对 DDL 变更同步的所有前提条件,后续就是不同的连接器实现相应的接口,进行 DDL 变更同步的适配工作。

SeaTunnel CDC 相干设计,可参考《解读重要性能个性:新手入门 Apache SeaTunnel CDC》。

Split 拆分优化

在本次更新之前,CDC Source 读取时只能基于数值类型的主键列进行 Split 的拆分,而在理论应用场景中,很多表没有主键,或者主键的数据类型是字符串类型,这会导致无奈进行 CDC 同步。本次更新增加了两个重大 feature:

  • 一个是反对惟一索引作为 split 拆分字段;
  • 另一个是反对字符串类型的字段进行 split 拆分。

这意味着只有 source 表中领有主键列或者惟一索引列,并且列的类型是数值或者字符串,就能主动进行 split 的拆分,从而疾速实现 CDC 的读取。另外,新版本对于基于字符串类型列进行 split 拆分的算法进行了优化,通过测试,一张领有 4 亿行,60 个字段的 MySQL 数据表,针对字符串类型主键的 split 拆分由原来的 3 个小时缩短到 20 分钟。在 JDBC Source 的 partition 拆分中,咱们增加了同样的算法,从而让 JDBC Source 针对字符串类型的 split 拆分也失去了优化。

新减少 MongoDB CDC 连接器

同时,SeaTunnel 2.3.3 版本新增了 MongoDB CDC 连接器,也能反对 CDC 同步。

Transform 更新

SQL Transform 反对 select * 和 like 含糊匹配。

select 能够查问出从 source 传入的所有字段,在 select 之后能够增加其它字段用于实现在同步的过程中增加自定义列的成果,比方上面的示例:

transform {
  Sql {
    source_table_name = "fake"
    result_table_name = "fake1"
    query = "select *, current_timestamp as sync_timestamp from fake"
  }
}

通过这个 Transform 的解决,会在 source 输出的第一行数据中增加一个 sync_timestamp 列,该列的值是该行数据通过该 Transform 时的零碎工夫戳。

like 含糊匹配用于在 Transform 对数据数据进行过滤,比方上面的示例:

transform {
  Sql {
    source_table_name = "fake"
    result_table_name = "fake1"
    query = "select *, current_timestamp as sync_timestamp from fake where name like'%Demo_'"
  }
}

通过这个 Transform 解决之后,除了实现了上一个示例增加列的成果之外,还能够对数据进行过滤,只有 name 字段的值以 Demo_结尾的行才会输入到上游解决节点(其它 Transform 节点或 Sink 节点)。

根底能力更新

在做 CDC 多表同步的场景下,之前指标表无奈主动创立,须要用户手工在指标端创立好表之后能力进行同步。在本次更新中,增加了 JDBC Sink 主动建表的性能,JDBC Sink 将依据上游传递过去的 catalogtable 主动生成创立表的 DDL 语句,并在指标数据库进行建表。

  • 留神,很多数据库都能够应用 JDBC Sink 连接器,但并不是所有数据库都曾经实现了主动建表,本次更新指标端反对主动建表的数据库有 MySQL, Oracle, Postgres, SQLServer。另外,应用主动建表对 Source Connector 也有要求,Source 连接器必须实现了 Catalog,本次更新中只有 CDC Source 实现了 Catalog,所以主动建表性能只有在 CDC Source 同步到 MySQL/Oracle/Postgres/SQLServer,并且是在多表同步模式下能力失效。

Zeta 引擎更新

  1. 反对 Schema evolution(DDL 变更同步)。
  2. Rest API 增加了提交作业的 API,用户能够应用 Rest API 进行作业的提交。这对于那些自研开发了页面集成 SeaTunnel 的用户来说十分重要,这意味着他们不再须要独自为提交作业装置 SeaTunnel Client。

示例如下:

network:
    rest-api:
      enabled: true
      endpoint-groups:
        CLUSTER_WRITE:
          enabled: true
        DATA:
          enabled: true
    join:
      tcp-ip:
        enabled: true
        member-list:
          - localhost
    port:
      auto-increment: true
      port-count: 100
      port: 5801

具体可参考:https://seatunnel.apache.org/docs/seatunnel-engine/rest-api/#…

  1. 作业配置反对变量替换和传参,本次更新之后,用户能够在作业的 config 文件中应用变量,而后在真正提交作业时通过命令行传参的形式来动静替换这些变量,借助这个性能,用户能够实现离线增量同步性能。

其余性能更新、优化和 Bug 修复

除此之外,新版本还在 SeaTunnel Connector、Zeta 引擎、Transform、CI 等方面进行了重要更新和优化,修复了以往版本的 Bug,并更新了将近 30 个我的项目文档,其中包含数十个新增 Connector 的应用文档阐明,为用户在理论利用场景中进行不同 Connector 的接入提供具体的领导。

  • 详情参考 Release Note:https://github.com/apache/seatunnel/releases
  • 2.3.3 版本下载地址:https://seatunnel.apache.org/download

致谢贡献者

感激 @刘黎对此次发版的领导与帮忙,以及下列贡献者对本次发版的反对!

贡献者 GitHub ID

本文由 白鲸开源科技 提供公布反对!

退出移动版