蚊章汇 - Li Zongwen
type: channel
link: https://linuxcn.bwsl.wang/author/1741/
description: Li Zongwen
items: 使用这个开源工具轻松同步数据库

使用这个开源工具轻松同步数据库
type: item
date: 2023-04-19T01:36:22+08:00
description: 开源的 Apache SeaTunnel 项目是一个数据整合平台，可以很容易地实现数据同步。 变更数据捕获 Change Data Capture （CDC）使用服务端代理来记录、添加、更新和删除对数据表的各种操作。它以一种易用的关系型格式提供了数据变化的细节信息。它可以捕获将更改应用于目标环境中的已修改行所需的列信息和元数据。这些信息保存在一个与被跟踪的源表的列结构相对应的变化表内。捕获变更的数据可不是一件容易的事。不过，有一个开源项目 —— Apache SeaTunnel，它是一个数据整合平台，它提供的 CDC 功能的设计理念和功能集使这些捕获成为可能，其功能包括上文提到的，超越了现有产品的解决方案。使用场景CDC 的经典应用是异质数据库之间的数据同步或备份。你可以在 MySQL、PostgreSQL、MariaDB 和类似的数据库间进行数据同步。另外一个例子，你也可以将数据同步到应该全文搜索引擎。借助 CDC，你可以基于 CDC 捕获的数据创建备份。如果设计得当，数据分析系统通过订阅目标数据表的变化情况获取需要处理的数据，而不需要将分析过程嵌入已有系统。在微服务间共享数据状态微服务现在很流行，但是在微服务间共享信息往往是一件复杂的事。CDC 是一个可能的解决方案。微服务可以使用 CDC 来获取其他微服务的数据库变化，获取数据状态更新，以及执行相应逻辑。更新缓存 命令查询责任隔离 Command Query Responsibility Segregation （CQRS）的概念是将命令活动与查询活动分开。这两者有本质上的不同：命令向数据源写入数据。查询从数据源读取数据。问题是，读事件发生的时间与写事件发生的时间有关，以及这些事件的发生是由谁来承担责任的?更新缓存可能很困难。你可以使用 CDC 从数据库获取数据更新事件，让它控制缓存的更新或失效。CQRS 设计通常使用两种不同的存储实例来支持业务查询和变更操作。为了保证数据的一致性，我们可以使用分布式事务来保证强大的数据一致性，代价是可用性、性能和扩展性。你也可以使用 CDC 来确保最终的数据一致性，它的性能和伸缩性较好，但其代价是数据延迟，目前业界可以保持在毫秒范围内。例如，你可以使用 CDC 把 MySQL 中的数据同步到你的全文搜索引擎（比如ElasticSearch）。在这种架构中，ElasticSearch 搜索了所有的查询，但是当你需要修改数据时，你不能直接操作 ElasticSearch 的，你需要修改上游的 MySQL 数据，因而生成了一个更新事件。当 ElasticSearch 监视数据库时，这个事件就被系统获取了，并在 ElasticSearch 中提示更新。在一些 CQRS 系统中，也可以用类似的方法更新查询视图。痛点CDC 不是一个新概念，很多现有的项目已经实现了它。但是对很多用户来说，已有解决方案存在一些不足。单数据表配置当你使用一些 CDC 软件时，你必须分别配置每个表。例如，为了同步十张表，你需要写十条 源 SQL 和 汇聚 Sink SQL 语句。为了进行转换操作，你也需要写与转换相关的 SQL 语句。有时候，对于一张表来说可以手写，但只对数据量小的情况适用。当数据量大时，会发生类型映射或参数配置的错误，进而导致较高的操作和维护成本。SeaTunnel 是一个易用的数据集成平台，有望解决这个问题。不支持模式演化一些 CDC 解决方案支持 DDL 事件传递，但不支持传递到 汇聚节点 Sink ，以便它能进行同步变更。由于无法根据 DDL 事件改变转换的类型信息，所以即使一个能获取事件的 CDC 也不一定可以将它发送至引擎（所以汇聚节点不能遵循 DDL 事件来进行变更）。太多的链接在一些 CDC 平台上，当有多个表时，如果一张表被同步了，就必须使用一个链接来代表一张表。当存在多个表时，也需要很多链接。这就给源 JDBC 数据库带来了压力，同时导致binlog 过多，还会导致重复的日志解析。SeaTunnel CDC 架构的目标Apache SeaTunnel 是一个开源、高效、分布式、大规模的数据集成框架。为了解决现有数据集成工具解决不了的问题，开发者社区“重新造轮子”，开发了一种具有独特功能的 CDC 平台。它的架构设计吸收了现有工具的优点，消除了相应的缺点。Apache Seatunnel 支持：以无锁并行的方式快照历史数据。日志心跳检测和动态添加数据表。读取子数据库、子表和多结构表。模式演进。所有基础的 CDC 功能。它降低了用户的操作和维护成本，并且支持动态添加数据表。例如，当你要同步整个数据库，并在稍后需要添加一个新表，你不必手动维护、改变配置或重启当前作业。另外，Apache SeaTunnel 也支持并行读取子数据库、子表和多结构…