SeaTunnel引擎下的SQL Server CDC解决方案:构建高效数据管道

在快速发展的数据驱动时代,实时数据处理已经成为企业决策和运营的关键因素。特别是在处理来自各种数据源的信息时,如何确保数据的及时、准确和高效同步变得尤为重要。本文着重介绍了如何利用 SqlServer CDC 源连接器在 SeaTunnel 框架下实现 SQL Server 到其他数据系统的实时数据同步,这对于希望提升数据处理能力和实时数据分析的企业来说,具有重要的实践意义。

SQL Server CDC

SqlServer CDC 源连接器

支持 SQL Server 版本

  • 服务器:2019(或更高版本,仅供参考)

支持引擎

SeaTunnel Zeta

Flink

主要特性

描述

SqlServer CDC 连接器允许从 SqlServer 数据库读取快照数据和增量数据。本文档描述了如何设置 SqlServer CDC 连接器以在 SqlServer 数据库上运行 SQL 查询。

支持的数据源信息

数据源 支持的版本 驱动 URL Maven
SqlServer * 服务器:2019(或更高版本,仅供参考) com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://localhost:1433;databaseName=column_type_test 下载

安装 Jdbc 驱动

请下载并将 SqlServer 驱动放在 ${SEATUNNEL_HOME}/lib/ 目录下。例如:cp mssql-jdbc-xxx.jar ${SEATUNNEL_HOME}/lib/

数据类型映射

SQL Server 数据类型 SeaTunnel 数据类型
CHAR VARCHAR NCHAR NVARCHAR STRUCT CLOB LONGVARCHAR LONGNVARCHAR STRING
BLOB BYTES
INTEGER INT
SMALLINT TINYINT SMALLINT
BIGINT BIGINT
FLOAT REAL FLOAT
DOUBLE DOUBLE
NUMERIC DECIMAL(column.length(), column.scale().orElse(0)) DECIMAL(column.length(), column.scale().orElse(0))
TIMESTAMP TIMESTAMP
DATE DATE
TIME TIME
BOOLEAN BIT BOOLEAN

源选项

名称 类型 必需 默认值 描述
username 字符串 - 连接数据库服务器时使用的用户名。
password 字符串 - 连接数据库服务器时使用的密码。
database-names 列表 - 需要监控的数据库名。
table-names 列表 - 表名为模式名和表名的组合(databaseName.schemaName.tableName)。
base-url 字符串 - 必须包含数据库的URL,如 "jdbc:sqlserver://localhost:1433;databaseName=test"。
startup.mode 枚举 INITIAL SqlServer CDC 消费者的可选启动模式,有效枚举为 "initial"、"earliest"、"latest" 和 "specific"。
startup.timestamp 长整型 - 从指定的纪元时间戳(以毫秒为单位)开始。 注意,当使用 "startup.mode" 选项为 'timestamp' 时,此选项是必需的。
startup.specific-offset.file 字符串 - 从指定的 binlog 文件名开始。 注意,当 "startup.mode" 选项使用 'specific' 时,此选项是必需的。
startup.specific-offset.pos 长整型 - 从指定的 binlog 文件位置开始。 注意,当 "startup.mode" 选项使用 'specific' 时,此选项是必需的。
stop.mode 枚举 NEVER SqlServer CDC 消费者的可选停止模式,有效枚举为 "never"。
stop.timestamp 长整型 - 从指定的纪元时间戳(以毫秒为单位)停止。 注意,当 "stop.mode" 选项使用 'timestamp' 时,此选项是必需的。
stop.specific-offset.file 字符串 - 从指定的 binlog 文件名停止。 注意,当 "stop.mode" 选项使用 'specific' 时,此选项是必需的。
stop.specific-offset.pos 长整型 - 从指定的 binlog 文件位置停止。 注意,当 "stop.mode" 选项使用 'specific' 时,此选项是必需的。
incremental.parallelism 整型 1 增量阶段中并行读取器的数量。
snapshot.split.size 整型 8096 表快照的分割大小(行数),快照期间的表会被分割成多个分片进行读取。
snapshot.fetch.size 整型 1024 读取表快照时每次轮询的最大提取量。
server-time-zone 字符串 UTC 数据库服务器中的会话时区。
connect.timeout 时长 30s 连接器尝试连接到数据库服务器后等待超时的最大时间。
connect.max-retries 整型 3 连接器尝试建立数据库服务器连接的最大重试次数。
connection.pool.size 整型 20 连接池大小。
chunk-key.even-distribution.factor.upper-bound 双精度浮点型 100 分块键分布因子的上界。此因子用于判断表数据是否均匀分布。如果计算出的分布因子小于或等于此上界值(即 (MAX(id) - MIN(id) + 1) / 行数),则表分块将被优化为均匀分布。否则,如果分布因子更大,则表将被认为是不均匀分布的,并且如果估计的分片数超过 sample-sharding.threshold 指定的值,将使用基于抽样的分片策略。默认值为 100.0。
chunk-key.even-distribution.factor.lower-bound 双精度浮点型 0.05 分块键分布因子的下界。此因子用于判断表数据是否均匀分布。如果计算出的分布因子大于或等于此下界值(即 (MAX(id) - MIN(id) + 1) / 行数),则表分块将被优化为均匀分布。否则,如果分布因子更小,则表将被认为是不均匀分布的,并且如果估计的分片数超过 sample-sharding.threshold 指定的值,将使用基于抽样的分片策略。默认值为 0.05。
sample-sharding.threshold 整型 1000 触发抽样分片策略的估计分片数阈值。当分布因子超出 chunk-key.even-distribution.factor.upper-boundchunk-key.even-distribution.factor.lower-bound 指定的范围,并且估计的分片数(计算为近似行数 / 分块大小)超过此阈值时,将使用抽样分片策略。这可以帮助更有效地处理大型数据集。默认值为1000分片。
inverse-sampling.rate 整型 1000 抽样分片策略中使用的抽样率的倒数。例如,如果这个值设置为1000,意味着抽样过程中应用了1/1000的抽样率。这个选项提供了在控制抽样粒度的灵活性,从而影响最终的分片数量。特别是在处理非常大的数据集时,更低的抽样率是首选。默认值为1000。
exactly_once 布尔型 true 启用精确一次语义。
debezium.* 配置 - 将Debezium的属性传递给用于从SqlServer服务器捕获数据变化的Debezium嵌入式引擎。 查看Debezium的SqlServer连接器属性获取更多信息
format 枚举 DEFAULT SqlServer CDC 的可选输出格式,有效枚举为 "DEFAULT"、"COMPATIBLE_DEBEZIUM_JSON"。
common-options - 源插件的通用参数,请参考源通用选项获取详细信息。

任务示例

初始读取简单示例

这是一个流模式CDC初始化读取的示例,成功读取表数据后将进行增量读取。以下SQL DDL仅供参考。

ini 复制代码
env {
  # 在此处设置引擎配置
  execution.parallelism = 1
  job.mode = "STREAMING"
  execution.checkpoint.interval = 5000
}

source {
  # 仅用于测试和演示功能的示例源插件
  SqlServer-CDC {
    result_table_name = "customers"
    username = "sa"
    password = "Y.sa123456"
    startup.mode="initial"
    database-names = ["column_type_test"]
    table-names = ["column_type_test.dbo.full_types"]
    base-url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
  }
}

transform {
}

sink {
  console {
    source_table_name = "customers"
  }
  

增量读取简单示例

这是一个增量阅读示例,用于阅读变更数据并打印。

ini 复制代码
env {
  # 在此处设置引擎配置
  execution.parallelism = 1
  job.mode = "STREAMING"
  execution.checkpoint.interval = 5000
}

source {
  # 仅用于测试和演示功能的示例源插件
  SqlServer-CDC {
    # 设置精确一次读取
    exactly_once=true 
    result_table_name = "customers"
    username = "sa"
    password = "Y.sa123456"
    startup.mode="latest"
    database-names = ["column_type_test"]
    table-names = ["column_type_test.dbo.full_types"]
    base-url = "jdbc:sqlserver://localhost:1433;databaseName=column_type_test"
  }
}

transform {
}

sink {
  console {
    source_table_name = "customers"
  }
}

随着数据处理需求的不断增长和实时数据同步的重要性日益凸显,SqlServer CDC 源连接器在 SeaTunnel 生态系统中扮演着至关重要的角色。

通过本文的深入解析,我们希望您能够更好地理解并利用这一强大工具,从而实现数据流的高效、稳定和精准同步。

无论您是数据工程师、系统架构师还是业务分析师,掌握如何在 SeaTunnel 中部署和优化 SQL Server CDC 连接器,都将为您的数据处理能力带来显著提升。

本文由 白鲸开源科技 提供发布支持!

相关推荐
samLi06202 小时前
【工具变量】全国省市区县土地出让结果公告数据(2000-2024年)
大数据
chevysky.cn4 小时前
Elasticsearch部署和集成
大数据·elasticsearch·jenkins
青云交5 小时前
Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
java·大数据·数据记录·远程手术机器人·基层医疗·跨院协作·弱网络适配
武子康6 小时前
大数据-38 Redis 分布式缓存 详细介绍 缓存、读写、旁路、穿透模式
大数据·redis·后端
时序数据说6 小时前
时序数据库的存储之道:从数据特性看技术要点
大数据·数据库·物联网·开源·时序数据库·iotdb
bxlj_jcj7 小时前
Flink时间窗口详解
大数据·flink
诗旸的技术记录与分享7 小时前
Flink-1.19.0源码详解-番外补充4-JobGraph图
大数据·flink
落霞的思绪7 小时前
使用云虚拟机搭建hadoop集群环境
大数据·hadoop·分布式