Canal 是一个 CDC(ChangeLog Data Capture,变更日志数据捕获)工具,可以实时地将 MySQL 变更传输到其他系统。Canal 为变更日志提供了统一的数据格式,并支持使用 JSON 或 protobuf 序列化消息(Canal 默认使用 protobuf)。 Flink 支持将 Canal 的 JSON 消息解析为 INSERT / UPDATE / DELETE 消息到 Flink SQL 系统中。
同样,使用flink sql来消费的时候,sql和上面使用canal类似,只需要把foramt改成debezium-json即可。 CanalJson反序列化源码解析 接下来我们看下flink的源码中canal-json格式的实现。canal 格式作为一种flink的格式,而且是source,所以也就是涉及到读取数据的时候进行反序列化,我们接下来就简单看看CanalJson的反序列化的实现。
StreamExecutionEnvironment; public class FlinkCDC { public static void main(String[] args) throws Exception { //1.获取Flink 执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(1); //1.1 开启CK // env.enableCheckpointing(5000); // env....
首先mysql-cdc 作为 Flink SQL 的一个 connector,那就肯定会对应一个 TableFactory 类,我们就从这个工厂类入手分析一下源码的实现过程,先找到源码里面的 MySQLTableSourceFactory 这个类,然后来看一下它的 UML 类图. 从上图中可以看到 MySQLTableSourceFactory 只实现了 DynamicTableSourceFactory 这个接口,并没有实现...
CDC主要分为基于查询和基于Binlog两种方式,我们主要了解一下这两种之间的区别: FlinkCDC其实和canal差不多,只不过就是flink社区开发的组件,用起来更方便一些。 2.2.1 DataStream的方式 (默认序列化器) 第一部分: 创建环境 第二部分: 设置ck检查点那一套,每隔多久做一次ck,ck的一致性语义,ck的重启策略,状态后端...
Debezium是一种CDC(Change Data Capture)工具,工作原理类似大家所熟知的Canal, DataBus, Maxwell等,是通过抽取数据库日志来获取变更。 Debezium最初设计成一个Kafka Connect 的Source Plugin,目前开发者虽致力于将其与Kafka Connect解耦,但当前的代码实现还未变动。下图引自Debeizum官方文档,可以看到一个Debezium在一个...
Debezium是一种CDC(Change Data Capture)工具,工作原理类似大家所熟知的Canal, DataBus, Maxwell等,是通过抽取数据库日志来获取变更。 Debezium最初设计成一个Kafka Connect 的Source Plugin,目前开发者虽致力于将其与Kafka Connect解耦,但当前的代码实现还未变动。下图引自Debeizum官方文档,可以看到一个Debezium在一个...
一.项目结构(mysql-cdc为主) 项目结构 1. 目录结构 带有test项目都是用于测试的项目 后缀带有cdc的表示一个database的连接器,区分sql与api形式 flink-format-changelog-json : 用于解析json成RowData的模块 flink-connector-debezium : 该模块封装debezium以及相关核心代码实现,并且修改了debezium的部分源码 ...
flink-cdc源码地址 : https://github.com/ververica/flink-cdc-connectors flink-cdc不再flink项目中,在flink1.11之后flink引入cdc功能,下面我们以源码深入了解flink-cdc实现原理, 我们主要以flink-cdc-mysql为主,其余代码基本差不太多 事先需要先简单了解一下debezium相关原理,flink-cdc是基于debezium实现的 ...
Flink CDC在GitHub上已获得800+ star,其底层封装了Debezium。在同步一张表时,Flink CDC分为全量和增量两个阶段,通过全局锁和表锁确保数据一致性,实现无缝的全量数据与增量数据衔接。Canal Canal,源于阿里,主要用于基于MySQL增量日志解析,提供数据订阅和消费服务。早期为解决跨机房同步需求,Canal支持...