当前位置: 主页 > JAVA语言

java数据同步解决方案-主从服务器 解决同步

发布时间:2023-03-29 10:13   浏览次数:次   作者:佚名

1.概述

变化数据捕获简称CDC(Change Data Capture),可以识别提取从上次提取之后发生变化的数据,在广义的概念上,只要能捕获数据变更的技术,我们都可以称为CDC。通常我们说的 CDC技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。CDC的两种模式:

(1)同步:同步CDC主要是采用触发器记录新增数据,基本能够做到实时增量提取。

(2)异步:异步CDC通过分析已经提交的日志记录来得到增量数据信息,有一定的延时,是本文采用的模式。

1.1. 应用场景

(1)数据同步,用于备份、容灾。

(2)数据分发,一个数据源分发给多个下游。

(3)数据采集,面向数据仓库/数据湖的ETL数据集成。

1.2. 主流的实现机制

(1)基于查询的CDC

a)离线调度查询作业,批处理。

b)无法保障数据一致性。

c)不保障实时性。

(2)基于日志的CDC

a)实时消费日志,流处理。

b)保障数据一致性。

c)提供实时数据。

2.方案对比

主流开源CDC方案对比如下图所示,主要通过监控各数据库的事务日志达到监控数据变化的目的,根据对比采用Flink CDC 方案。

图:多种CDC技术对比

(1) DataX 不支持增量同步,Canal 不支持全量同步。虽然两者都是非常流行的数据同步工具,但在场景支持上仍不完善。

(2) 在全量+增量一体化同步方面java数据同步解决方案,只有Flink CDC、Debezium、Oracle Goldengate 支持较好。

(3) 在架构方面java数据同步解决方案,Apache Flink 是一个非常优秀的分布式流处理框架,因此Flink CDC 作为Apache Flink 的一个组件具有非常灵活的水平扩展能力。而DataX 和Canal 是个单机架构,在大数据场景下容易面临性能瓶颈的问题。

(4) 在数据加工的能力上,CDC 工具是否能够方便地对数据做一些清洗、过滤、聚合,甚至关联操作?Flink CDC 依托强大的Flink SQL 流式计算能力,可以非常方便地对数据进行加工。而 Debezium 等则需要通过复杂的 Java 代码才能完成,使用门槛比较高。

(5) 另外,在生态方面,这里指的是上下游存储的支持。Flink CDC 上下游非常丰富,支持对接MySQL、PostgreSQL 等数据源,还支持写入到TiDB、HBase、Kafka、Hudi 等各种存储系统中,也支持灵活的自定义connector。

因此,不论从性能还是适用范围上,Flink CDC 都可以作为最佳选择。Flink CDC Connectors是Apache Flink的一组source连接器,使用变更数据捕获 (CDC) 从不同的数据库中获取变更,Flink CDC连接器集成了Debezium作为引擎来捕获数据变化,所以它可以充分发挥Debezium的能力。目前连接器支持的数据库有:MySQL(5.6+)、PostgreSQL(9.6+)、MongoDB(3.6+)、Oracle(11+)、TiDB(5.1.x+)、SQL Server(2012+)和Oceanbase(3.1.x+)。