使用开源工具更轻松地同步数据库

开源的 Apache SeaTunnel 项目是一个数据集成平台,可以轻松地同步数据。
还没有读者喜欢这篇文章。
Databases as a service

Jason Baker。CC BY-SA 4.0。

变更数据捕获 (CDC) 使用服务器代理来记录、插入、更新和删除应用于数据库表的活动。CDC 以易于使用的关系格式提供有关变更的详细信息。它捕获将变更应用于修改行的目标环境所需的列信息和元数据。一个镜像跟踪源表列结构的变更表存储此信息。

捕获变更数据绝非易事。然而,开源的 Apache SeaTunnel 项目 i 是一个数据集成平台,它提供的 CDC 功能具有设计理念和功能集,使得这些捕获成为可能,其功能超越了现有解决方案。

CDC 使用场景

CDC 的经典用例是异构数据库之间的数据同步或备份。您可以在一个场景中同步 MySQL、PostgreSQL、MariaDB 和类似数据库之间的数据。在另一个示例中,您可以将数据同步到全文搜索引擎。借助 CDC,您可以根据 CDC 捕获的内容创建数据备份。

如果设计良好,数据分析系统可以通过订阅目标数据表中的更改来获取数据进行处理。无需将分析过程嵌入到现有系统中。

在微服务之间共享数据状态

微服务 很受欢迎,但它们之间共享信息通常很复杂。CDC 是一种可能的解决方案。微服务可以使用 CDC 来获取其他微服务数据库中的更改,获取数据状态更新,并执行相应的逻辑。

更新缓存

命令查询职责分离 (CQRS) 的概念是将命令活动与查询活动分离。两者从根本上是不同的

  • 命令将数据写入数据源。
  • 查询从数据源读取数据。

问题是,读取事件相对于写入事件何时发生?以及由谁来承担使这些事件发生的负担?

更新缓存可能很困难。您可以使用 CDC 从数据库获取数据更新事件,并让其控制缓存的刷新或失效。

CQRS 设计通常使用两个不同的存储实例来支持业务查询和更改操作。由于使用了两个存储,为了确保数据一致性,我们可以使用分布式事务来确保强数据一致性,但这会牺牲可用性、性能和可伸缩性。您也可以使用 CDC 来确保数据的最终一致性,这样可以获得更好的性能和可伸缩性,但会牺牲数据延迟,目前行业内可以将数据延迟保持在毫秒范围内。

例如,您可以使用 CDC 将 MySQL 数据同步到您的全文搜索引擎,例如 ElasticSearch。在这种架构中,ElasticSearch 搜索所有查询,但是当您想要修改数据时,您不会直接更改 ElasticSearch。相反,您修改上游 MySQL 数据,这将生成数据更新事件。此事件由 ElasticSearch 系统在监控数据库时使用,并且该事件会提示 ElasticSearch 内的更新。

在某些 CQRS 系统中,可以使用类似的方法来更新查询视图。

痛点

CDC 并非新概念,各种现有项目都实现了它。然而,对于许多用户来说,现有解决方案存在一些缺点。

单表配置

使用某些 CDC 软件,您必须单独配置每个表。例如,要同步十个表,您需要编写十个源 SQL 和 Sink SQL。要执行转换,您还需要编写转换 SQL。

有时,可以手动编写表,但仅当数量较小时。当数量较大时,可能会发生类型映射或参数配置错误,从而导致高昂的运维成本。

Apache SeaTunnel 是一个易于使用的数据集成平台,希望解决这个问题。

不支持模式演变

一些 CDC 解决方案支持发送 DDL 事件,但不支持发送到 Sink,以便它可以进行同步更改。即使可以获取事件的 CDC 也可能无法将其发送到引擎,因为它无法根据 DDL 事件更改转换的 Type 信息(因此 Sink 无法跟随 DDL 事件进行更改)。

链接过多

在某些 CDC 平台上,当有多个表时,必须使用链接来表示每个表,同时进行同步。当表很多时,需要很多链接。这给源 JDBC 数据库带来压力,并导致过多的 Binlog,这可能会导致重复的日志解析。

SeaTunnel CDC 架构目标

Apache SeaTunnel 是一个开源、高性能、分布式和海量数据集成框架。为了解决现有数据集成工具的 CDC 功能无法解决的问题,社区“重新发明轮子”以开发具有独特功能的 CDC 平台。这种架构设计基于现有 CDC 工具的优势和劣势。

Apache Seatunnel 支持

  • 无锁并行快照历史数据。
  • 日志心跳检测和动态表添加。
  • 子数据库、子表和多结构表读取。
  • 模式演变。
  • 所有基本 CDC 功能。

Apache SeaTunnel 降低了用户的运维成本,并且可以动态添加表。

例如,当您想要同步整个数据库并在以后添加新表时,您无需手动维护它、更改作业配置或停止并重启作业。

此外,Apache SeaTunnel 支持并行读取子数据库、子表和多结构表。它还允许模式演变、DDL 传输以及在引擎中支持模式演变的更改,这些更改可以更改为 Transform 和 Sink。

SeaTunnel CDC 当前状态

目前,CDC 具有支持增量和快照阶段的基本功能。它还支持 MySQL 用于实时和离线使用。MySQL 实时测试已完成,离线测试即将到来。模式尚不支持,因为它涉及到 Transform 和 Sink 的更改。动态发现新表尚不支持,并且已经为多结构表保留了一些接口。

项目展望

作为 Apache 孵化项目,Apache SeaTunnel 社区正在快速发展。下一个社区规划会议有以下主要方向

1. 扩展和改进连接器和目录生态系统

我们正在努力增强许多连接器和目录功能,包括

  • 支持更多连接器,包括 TiDB、Doris 和 Stripe。
  • 在可用性和性能方面改进现有连接器。
  • 支持用于实时、增量同步场景的 CDC 连接器。

任何对连接器感兴趣的人都可以查看 Umbrella

2. 支持更多数据集成场景 (SeaTunnel Engine)

现有引擎无法解决一些痛点,例如整个数据库的同步、表结构更改的同步以及任务故障的粒度过大。

我们正在努力解决这些问题。任何对 CDC 引擎感兴趣的人都应该查看 issue 2272

3. 更易于使用 (SeaTunnel Web)

我们正在努力提供 Web 界面,使操作更轻松、更直观。通过 Web 界面,我们将使 Catalog、Connector、Job 和相关信息能够以 DAG/SQL 的形式显示。我们还为用户提供访问调度平台的权限,以轻松处理任务管理。

访问 web 子项目 以获取有关 Web UI 的更多信息。

总结

通常必须仔细跟踪数据库活动,以便根据记录更新、删除或插入等活动来管理更改。变更数据捕获提供了此功能。Apache SeaTunnel 是一个开源解决方案,可满足这些需求并不断发展以提供更多功能。项目和社区都很活跃,欢迎您的参与。

Li Zongwen
李宗文,Apache SeaTunnel(Incubating) Committer,数据工程师

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.