@cool-summer-021
这篇”出口转内销“的英文比较差,所以翻译也不太好达意。
This commit is contained in:
Xingyu Wang 2023-04-18 17:37:39 +08:00
parent 91c9d5b90a
commit 29bd69d6c2

View File

@ -3,115 +3,121 @@
[#]: author: "Li Zongwen https://opensource.com/users/li-zongwen"
[#]: collector: "lkxed"
[#]: translator: "cool-summer-021"
[#]: reviewer: " "
[#]: reviewer: "wxy"
[#]: publisher: " "
[#]: url: " "
Synchronize databases more easily with open source tools
使用这个开源工具轻松同步数据库
======
CDC 使用服务端代理记录、添加、更新和删除对数据表的各种操作。它以一种易用的关系型格式提供了关于数据变化的细节信息。它可以捕获将更改应用于已修改行的目标环境所需的列信息和元数据。这些信息保存在一个与被跟踪的源表的列结构相对应的变化表内。
![][0]
捕获变化的数据可不是一件容易的事。不过,有一个开源项目————[Apache SeaTunnel][1],它是一个数据整合平台,它提供了符合设计理念的 CDC 功能和相关的工具箱,实现了对数据变化的捕获,其功能包括上文提到的和那些超越现有产品的解决方案。
> 开源的 Apache SeaTunnel 项目是一个数据整合平台,可以很容易地实现数据同步。
<ruby>变更数据捕获<rt>Change Data Capture</rt></ruby>CDC使用服务端代理来记录、添加、更新和删除对数据表的各种操作。它以一种易用的关系型格式提供了数据变化的细节信息。它可以捕获将更改应用于目标环境中的已修改行所需的列信息和元数据。这些信息保存在一个与被跟踪的源表的列结构相对应的变化表内。
捕获变更的数据可不是一件容易的事。不过,有一个开源项目 —— [Apache SeaTunnel][1],它是一个数据整合平台,它提供的 CDC 功能的设计理念和功能集使这些捕获成为可能,其功能包括上文提到的,超越了现有产品的解决方案。
### 使用场景
CDC的经典应用是数据同步或不同数据库间的备份。你可以在[MySQL][2], PostgreSQL, MariaDB等类似的数据库间进行数据同步。你也可以将数据同步到全文搜索引擎。借助 CDC你还可以基于 CDC 捕获的数据创建备份。
CDC 的经典应用是异质数据库之间的数据同步或备份。你可以在 [MySQL][2]、PostgreSQL、MariaDB 和类似的数据库间进行数据同步。另外一个例子,你也可以将数据同步到应该全文搜索引擎。借助 CDC可以基于 CDC 捕获的数据创建备份。
设计完成后,数据分析系统通过订阅目标数据表的变化情况获取需要处理的数据。不需要将分析过程嵌入已有系统。
如果设计得当,数据分析系统通过订阅目标数据表的变化情况获取需要处理的数据,而不需要将分析过程嵌入已有系统。
### 在微服务间共享数据状态
微服务现在很流行但是在微服务间共享信息往往是一件复杂的事。CDC 是可能的解决方案之一。微服务可以使用 CDC 来获取其他微服务的数据库变化,获取数据状态更新,以及执行相应逻辑。
微服务现在很流行但是在微服务间共享信息往往是一件复杂的事。CDC 是一个可能的解决方案。微服务可以使用 CDC 来获取其他微服务的数据库变化,获取数据状态更新,以及执行相应逻辑。
### 更新缓存
[CQRS][4]是一种把查询操作分为一些命令的理念。其中有两点本质上的不同:
<ruby>命令查询责任隔离<rt>Command Query Responsibility Segregation</rt></ruby>[CQRS][4])的概念是将命令活动与查询活动分开。这两者有本质上的不同:
- 命令向数据源写入数据。
- 查询从数据源读取数据。
问题是,相对于写事件发生的时间,读事件什么时候发生,以及这些事件的发生是由谁来承担责任的?
问题是,读事件发生的时间与写事件发生的时间有关,以及这些事件的发生是由谁来承担责任的?
更新缓存是困难的。你可以使用 CDC 从数据库获取数据更新事件,让它控制缓存的更新或失效。
更新缓存可能很困难。你可以使用 CDC 从数据库获取数据更新事件,让它控制缓存的更新或失效。
CQRS 设计通常使用两种不同的存储实例来支持业务查询和更新操作。正是因为使用两个存储实例,我们可以以可用性、性能和可伸缩性为代价,使用分布式事务来确保数据一致性。你也可以使用CDC 来确保最终的数据一致性,它的性能和伸缩性较好,但其代价是数据延迟较严重,目前业界可以保持在毫秒范围内。
CQRS 设计通常使用两种不同的存储实例来支持业务查询和变更操作。为了保证数据的一致性,我们可以使用分布式事务来保证强大的数据一致性,代价是可用性、性能和扩展性。你也可以使用 CDC 来确保最终的数据一致性,它的性能和伸缩性较好,但其代价是数据延迟,目前业界可以保持在毫秒范围内。
例如,你可以使用 CDC 把 MySQL 中的数据同步到你的全文搜索引擎比如ElasticSearch。在这种架构中ElasticSearch 搜索了所有的查询,但是当你需要修改数据时,你不能直接操作 ElasticSearch 的,你是修改上游的 MySQL 数据来实现的因此就生成了一个更新事件。当ElasticSearch 监视数据库时,这个事件就被系统消费了,并在 ElasticSearch 中提示更新。
例如,你可以使用 CDC 把 MySQL 中的数据同步到你的全文搜索引擎比如ElasticSearch。在这种架构中ElasticSearch 搜索了所有的查询,但是当你需要修改数据时,你不能直接操作 ElasticSearch 的,你需要修改上游的 MySQL 数据,因而生成了一个更新事件。当 ElasticSearch 监视数据库时,这个事件就被系统获取了,并在 ElasticSearch 中提示更新。
在一些 CQRS 系统中,也可以用类似的方法更新查询视图。
### 痛点
CDC 不是一个新概念,很多现有的项目已经实现了它。但是对很多用户来说,已有解决方案存在一些不利因素
CDC 不是一个新概念,很多现有的项目已经实现了它。但是对很多用户来说,已有解决方案存在一些不
#### 单数据表配置
#### 单数据表配置
当你使用一些 CDC 软件时,你必须分别配置每个表。例如,为了同步十张表,你需要写十条 SQL 代码。为了进行一次转换操作,你也需要写与转换相关的 SQL 代码
当你使用一些 CDC 软件时,你必须分别配置每个表。例如,为了同步十张表,你需要写十条 源 SQL 和 <ruby>汇聚<rt>Sink</rt></ruby> SQL 语句。为了进行转换操作,你也需要写与转换相关的 SQL 语句
有时候,一张表可以手写,但只对数据量小的情况适用。当数据量大时,会发生类型映射或参数配置的错误,进而导致较高的操作和维护成本。
有时候,对于一张表来说可以手写,但只对数据量小的情况适用。当数据量大时,会发生类型映射或参数配置的错误,进而导致较高的操作和维护成本。
SeaTunnel是一个易用的数据集成平台有望解决这个问题。
SeaTunnel 是一个易用的数据集成平台,有望解决这个问题。
#### 不支持模式演化
一些CDC 解决方案支持DDL 事件传递,但不支持传递到 Sink所以它能进行同步变更。由于基于 DDL 事件的类型转换是不可变更的,所以即使一个能获取事件的 CDC 也不一定可以将它发送至引擎Sink 不能遵循 DDL 事件来改变它)。
一些 CDC 解决方案支持 DDL 事件传递,但不支持传递到 <ruby>汇聚节点<rt>Sink</rt></ruby>,以便它能进行同步变更。由于无法根据 DDL 事件改变转换的类型信息,所以即使一个能获取事件的 CDC 也不一定可以将它发送至引擎(所以汇聚节点不能遵循 DDL 事件来进行变更)。
#### 太多的链接
在一些 CDC 平台上,当有多个表时,如果一张表被同步了,就必须使用链接来代表每张表。当存在多个表时,也需要很多链接。这就给源 JDBC 数据库带来了压力同时导致binlog 文件过多,还会导致重复的日志解析。
在一些 CDC 平台上,当有多个表时,如果一张表被同步了,就必须使用一个链接来代表一张表。当存在多个表时,也需要很多链接。这就给源 JDBC 数据库带来了压力同时导致binlog 过多,还会导致重复的日志解析。
### SeaTunnel CDC 架构的目标
Apache SeaTunnel 是一个开源、高效、分布式、大量数据的集成架构。为了解决现有数据集成工具解决不了的问题,开发者社区“重新造轮子”,开发了一种具有独特功能的 CDC 平台。它的架构设计吸收了现有工具的优点,除了相应的缺点。
Apache SeaTunnel 是一个开源、高效、分布式、大规模的数据集成框架。为了解决现有数据集成工具解决不了的问题,开发者社区“重新造轮子”,开发了一种具有独特功能的 CDC 平台。它的架构设计吸收了现有工具的优点,除了相应的缺点。
Apache Seatunnel 支持:
- 以无锁并行的方式快照历史数据。
- 以无锁并行的方式快照历史数据。
- 日志心跳检测和动态添加数据表。
- 读取子数据库、子表和多结构表。
- 模式演
- 一切基础 CDC 功能。
- 模式演
- 所有基础的 CDC 功能。
减少了用户的操作和维护成本,并且支持动态添加数据表。
它降低了用户的操作和维护成本,并且支持动态添加数据表。
例如,当你要同步整个数据库,稍后需要添加一个新表,你不必手动维护、改变配置或重启当前作。
例如,当你要同步整个数据库,并在稍后需要添加一个新表,你不必手动维护、改变配置或重启当前作
另外Apache SeaTunnel也支持并行读取子数据库、子表和多结构表。还支持模式演化、DDL 转换和在引擎内改变支持的模式这些可以变为Transform和 Sink。
另外Apache SeaTunnel 也支持并行读取子数据库、子表和多结构表。还支持模式演进、DDL 转换,以及在引擎内改变支持的模式,这些可以变为 <ruby>转换器<rt>Transform</rt></ruby><ruby>汇聚节点<rt>Sink</rt></ruby>
### SeaTunnel CDC 现状
如今CDC 拥有基本功能,支持自动增长和快照数据。它也支持 MySQL 实时和离线使用。MySQL 实时功能测试已完成即将进行离线测试。目前还不支持该模式因为它涉及对Transform和Sink的更改。不支持动态发现新增表,已预留了一些支持多结构表的接口。
如今CDC 拥有支持增量和快照阶段的基本能力。它也支持 MySQL 实时和离线使用。MySQL 实时测试已完成,即将进行离线测试。因为它涉及对转换器和汇聚节点的更改,目前还不支持模式。不支持动态发现新增表,已预留了一些支持多结构表的接口。
### 项目前景
### 项目展望
作为 Apache 孵化的项目Apache SeaTunnel 的社区正快速发展起来。下一届社区计划会议的主要目标有:
#### 1. 发展并改进连接器和目录生态
#### 1发展并改进连接器和目录生态
我们正努力改善连接器和目录功能,包括:
- 支持连接更多数据库,包括TiDB, Doris 和 Stripe。
- 支持连接更多数据库,包括 TiDB、Doris 和 Stripe。
- 改善现有的连接器的易用性和性能。
- 支持 CDC 连接器用于实时、增量同步场景。
任何对连接器感兴趣者都可以查看 [Umbrella][5].
任何对连接器感兴趣者都可以查看 [Umbrella][5]
#### 2. 支持更多数据集成场景 (SeaTunnel Engine)
#### 2、支持更多数据集成场景SeaTunnel 引擎)
现有的引擎仍然存在一些解决不了的痛点,例如对整个数据库的同步,表结构变化的同步以及大粒度的任务失败。
现有的引擎仍然存在一些解决不了的痛点,例如对整个数据库的同步,表结构变化的同步以及任务失败的大粒度
我们正努力解决这些问题,对此感兴趣者可以查看[issue 2272][6]。
我们正努力解决这些问题,对此感兴趣者可以查看 [#2272 议题][6]。
#### 3. 更易使用Web 版)
#### 3更易使用Web 版)
我们正努力提供Web 平台接口令操作更简便。通过Web 平台接口我们将实现以DAG/SQL的形式查看目录、连接器、任务和相关信息。我们也会给予用户访问调度平台的权限,以便更方便地进行任务管理。
我们正努力提供 Web 界面,令操作更简便。通过 Web 界面,我们将实现以 DAG/SQL 的形式查看目录、连接器、任务和相关信息。我们也会给予用户访问调度平台的权限,以便更方便地进行任务管理。
欲了解更多关于 Web 版的信息,请访问[Web平台子项目][7]。
欲了解更多关于 Web 版的信息,请访问 [Web 平台子项目][7]。
### 总结
必须严密追踪数据库的相关动态才能对数据的更新、删除或添加操作进行管理。CDC 提供了这种功能。Apache SeaTunnel是一个开源解决方案能满足这些需求它将持续迭代更新从而提供更多功能。相关的项目和社区也很活跃欢迎你的加入。
数据库活动通常必须被仔细跟踪才能对数据的更新、删除或添加操作进行管理。CDC 提供了这种功能。Apache SeaTunnel 是一个开源解决方案,能满足这些需求,它将持续迭代更新,从而提供更多功能。该项目和社区也很活跃,欢迎你的加入。
*题图MJ:database connections illustration in high resolution, very detailed, 8k*
--------------------------------------------------------------------------------
@ -120,7 +126,7 @@ via: https://opensource.com/article/23/3/synchronize-databases-apache-seatunnel
作者:[Li Zongwen][a]
选题:[lkxed][b]
译者:[cool-summer-021](https://github.com/cool-summer-021)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -133,3 +139,4 @@ via: https://opensource.com/article/23/3/synchronize-databases-apache-seatunnel
[5]: https://github.com/apache/incubator-seatunnel/issues/1946
[6]: https://github.com/apache/incubator-seatunnel/issues/2272
[7]: https://github.com/apache/incubator-seatunnel-web
[0]: https://img.linux.net.cn/data/attachment/album/202304/18/173544yeggjebh4algejg4.jpg