采用Flink CDC操作SQL Server数据库获取增量变更数据
Flink CDC 1.12版本引入了对SQL Server的支持,包括SqlServerCatalog
和SqlServerTable
。在SqlServerCatalog
中,你可以根据表名获取对应的字段和字段类型。
SQL Server 2008 开始支持变更数据捕获 (CDC) 功能。CDC 允许你捕获对表中数据更改的数据,这样你就可以查询更改的数据而不需要扫描整个表。
1、准备工作
软件版本
Flink 1.17.1
数据库版本 Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
1.1、数据库准备 启动CDC
-- 开启SQL Server数据库CDC。 在需要开启CDC的数据库执行此命令
EXEC sys.sp_cdc_enable_db
-- 查询开启CDC的数据库
select name, is_cdc_enabled from sys.databases
1.2、开启SQL Server代理
打开 SQL Server配置管理器 => 选择SQL Server服务 => 选择SQL Server代理 右击开启
1.3、为需要跟踪更改的表启用 CDC。
-- 开启表级别的CDC --需要开启先SQL Server代理 然后执行
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo', -- source_schema
@source_name = 'AIR_STATION_HOUR_DATA', -- table_name
@capture_instance = NULL, -- capture_instance
@supports_net_changes = 1, -- supports_net_changes
@role_name = NULL -- role_name
-- 验证表是否开启cdc成功
EXEC sys.sp_cdc_help_change_data_capture
2、代码编写
2.1、引入依赖
<properties>
<flink.version>1.17.1</flink.version>
</properties>
<dependencies>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>9.4.1.jre8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java</artifactId>
<version>${flink.version}</version>