CDC 的全称是 Change Data Capture,在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。
目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。
Flink CDC 是一个独立的开源项目,项目代码托管在 GitHub 上。
Flink 社区开发了 flink-cdc-connectors 组件,这是一个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 source 组件。
前文
什么是CDC
CDC:全称是 Change Data Capture,即数据变更捕获技术,具体的含义是 通过识别和捕获对数据库中的数据所做的更改(包括数据或数据表的插入、更新、删除;数据库结构的变更调整等),然后将这些更改按发生的顺序完整记录下来,并实时通过中间技术桥梁(消息中间件、TCP等等)将变更顺序消息传送到下游流程或系统的过程。
Flink-CDC是什么
CDC Connectors for Apache Flink 是一组用于Apache Flink ®的源连接器,使用变更数据捕获 (CDC) 从不同数据库获取变更。
用于 Apache Flink 的 CDC 连接器将 Debezium 集成为捕获数据更改的引擎,所以它可以充分发挥 Debezium 的能力。白话的意思是,Flink-CDC 一个成型的cdc技术实现(Debezium)的包装。
Flink-CDC 特性
支持读取数据库快照,即使发生故障也能继续读取binlog,一次处理。
DataStream API 的 CDC 连接器,用户可以在单个作业中使用多个数据库和表的更改,而无需部署 Debezium 和 Kafka。
Table/SQL API 的 CDC 连接器,用户可以使用 SQL DDL 创建 CDC 源来监控单个表的更改。
CDC与Flink毕业版本
下表显示了 Flink CDC 连接器和 Flink 之间的版本映射:
Flink CDC 版本 | Flink版本 |
---|---|
1.0.0 | 1.11.* |
1.1.0 | 1.11.* |
1.2.0 | 1.12.* |
1.3.0 | 1.12.* |
1.4.0 | 1.13.* |
2.0.* | 1.13.* |
2.1.* | 1.13.* |
2.2.* | 1.13.* , 1.14.* |
SpringBoot项目整合Flink-CDC
说明
按常理来说,一个正常的 flink-job 最终我们并不会集成到springboot项目中,我们会直接编写一个maven项目,在发布时使用flink程序来启动任务。
比如官网示例:
本文既要使用flink-cdc进行数据变更捕获 (可以视作为一个flink-job),但又要契合我们的springboot项目,使用spring的特性,因此,我们需要转换一下思路,转换成什么样子呢?
就是不要将这个flink-cdc作为一个job使用flink程序进行发布提交,我们就当它在我们开发时一样,作为一个本地项目,main方法启动。
引入依赖
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
接入springboot项目
无法简单的使用main方法来启动 cdc 作业,因为如果这样的话,我们就无法与spring完美的契合。
因此我们可以利用springboot的特性, 实现 ApplicationRunner 将 flink-cdc 作为一个项目启动时需要运行的分支子任务即可。
创建测试表user
1 | CREATE TABLE `user` ( |
创建监听类实现 ApplicationRunner
1 | package com.itjing.flink.listener; |
自定义数据读取解析器
这里解析为一个数据变更对象
1 | package com.itjing.flink; |
变更对象
1 | package com.itjing.flink.domain; |
自定义sink交由spring管理
1 | package com.itjing.flink.sink; |
当然,以上仅仅只是整合思路,如果你想使用flink-cdc进行数据同步或日志记录等,结合您自身的需求进行调整,以上内容,大的架子是没问题的。