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 |
| 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-bound 和 chunk-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仅供参考。
env {# 在此处设置引擎配置execution.parallelism = 1job.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"}
增量读取简单示例
这是一个增量阅读示例,用于阅读变更数据并打印。
env {# 在此处设置引擎配置execution.parallelism = 1job.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 连接器,都将为您的数据处理能力带来显著提升。
本文由 白鲸开源科技 提供发布支持!
相关文章:
SeaTunnel引擎下的SQL Server CDC解决方案:构建高效数据管道
在快速发展的数据驱动时代,实时数据处理已经成为企业决策和运营的关键因素。特别是在处理来自各种数据源的信息时,如何确保数据的及时、准确和高效同步变得尤为重要。本文着重介绍了如何利用 SqlServer CDC 源连接器在 SeaTunnel 框架下实现 SQL Server …...
【攻防世界-misc】Encode
1.下载解压文件,打开这个内容有些疑似ROT13加密,利用在线工具解密:ROT13解码计算器 - 计算专家 得到了解密后的值 得到解码结果后,看到是由数字和字母组成,再根据题目描述为套娃,猜测为base编码(…...
visual c++ 2019 redistributable package
直接安装下面包只有24M Microsoft Visual C Redistributable 2019 x86: https://aka.ms/vs/16/release/VC_redist.x86.exe x64: https://aka.ms/vs/16/release/VC_redist.x64.exe ———————————————— 版权声明:本文为CSDN博主「kpacnB_Z」的原创文章…...
WPF中DataGrid解析
效果如图: 代码如下: <DataGrid Grid.Row"1" x:Name"dataGrid" ItemsSource"{Binding DataList}" AutoGenerateColumns"False"SelectedItem"{Binding SelectedItem,UpdateSourceTriggerPropertyChange…...
在数据库中进行表内容的修改(MYSQL)
根据表中内容,用命令语句创建数据库,表格,以及插入,修改,删除表格中的内容。 创建数据库:zrzy mysql> create database zrzy; 引用zrzy数据库: mysql> use zrzy; 创建student_info表&…...
Android中的多进程
在Android中也可以像pc一样开启多进程,这在android的编程中通常是比较少见的,以为在一个app基本上都是单进程工作就已经足够了,有一些特殊的场景,我们需要用多进程来做一些额外的工作,比如下载工作等。 在Android的An…...
Apache2.4 AliasMatch导致301重定向问题?
环境:ubuntu18.04-desktop apache2版本: rootubuntu:/etc/apache2# apache2ctl -v Server version: Apache/2.4.29 (Ubuntu) Server built: 2023-03-08T17:34:33apache配置: DocumentRoot /var/www/html # Alias就没事 # Alias "/my…...
广州华锐视点:基于VR元宇宙技术开展法律法规常识在线教学,打破地域和时间限制
随着科技的飞速发展,人类社会正逐渐迈向一个全新的时代——元宇宙。元宇宙是一个虚拟的、数字化的世界,它将现实世界与数字世界紧密相连,为人们提供了一个全新的交流、学习和娱乐平台。在这个充满无限可能的元宇宙中,法律知识同样…...
Maven——Maven使用基础
1、安装目录分析 1.1、环境变量MAVEN_HOME 环境变量指向Maven的安装目录,如下图所示: 下面看一下该目录的结构和内容: bin:该目录包含了mvn运行的脚本,这些脚本用来配置Java命令,准备好classpath和相关…...
U4_2:图论之MST/Prim/Kruskal
文章目录 一、最小生成树-MST生成MST策略一些定义 思路彩蛋 二、普里姆算法(Prim算法)思路算法流程数据存储分析 伪代码时间复杂度分析 三、克鲁斯卡尔算法(Kruskal算法)分析算法流程并查集-Find-set 伪代码时间复杂度分析 一、最…...
springboot 注解@JsonInclude
修饰 实体属性or实体类 //枚举值:ALWAYS,NON_NULL,NON_ABSENT,NON_EMPTY,NON_DEFAULT,CUSTOM,USE_DEFAULTS JsonInclude(Include.NON_EMPTY)//将该标记放在属性上,如果该属性为NULL则不参与序列化 //如果放在类上边,那对这个类的全部属性起作用 Inclu…...
Python 中文完整教程目录
Python 教程 Python 是一门易于学习、功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。 Python 官网(…...
C/C++---------------LeetCode第35. 搜索插入位置
插入的位置 题目及要求二分查找在main内使用 题目及要求 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: …...
网络安全--基于Kali的网络扫描基础技术
文章目录 1. 标准ICMP扫描1.1使用Ping命令1.1.1格式1.1.2实战 1.2使用Nmap工具1.2.1格式1.2.2实战1.2.2.1主机在线1.2.2.2主机不在线 1.3使用Fping命令1.3.1格式1.3.2实战 2. 时间戳查询扫描2.1格式2.2实战 3. 地址掩码查询扫描3.1格式3.2实战 2. TCP扫描2.1TCP工作机制2.2TCP …...
C语言——求π的近似值
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<math.h> int main() {int s;double n,t,pi;t1;pi0;n1.0;s1;while (fabs(t)>1e-6){pipit; nn2; s-s; ts/n;}pipi*4;printf("pi%lf\n",pi);return 0; }这里是求小数点后6位——1e-6&#…...
如何使用ffmpeg转换图片格式
ffmpeg简介与图片格式介绍 windows安装ffmpeg,从如下网站下载release版本 https://www.gyan.dev/ffmpeg/builds/ ffmpeg 6.1版本仍然不支持heic的图片格式,未来可能会支持,具体见该issue: https://trac.ffmpeg.org/ticket/6521 …...
11 动态规划解最后一块石头的重量II
来源:LeetCode第1049题 难度:中等 描述:有一堆石头,用证书数组stones表示,其中stones[i]表示第i块石头的重量,每一回合,从中选出任意两块石头,然后将他们放在一起粉碎,…...
LeetCode算法题解(动态规划,股票买卖)|LeetCode121. 买卖股票的最佳时机、LeetCode122. 买卖股票的最佳时机 II
一、LeetCode121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一…...
python实验3 石头剪刀布游戏
实验3:石头剪刀布游戏 一、实验目的二、知识要点图三、实验1. 石头剪刀布2. 实现大侠个人信息 一、实验目的 了解3类基本组合数据类型。理解列表概念并掌握Python中列表的使用。理解字典概念并掌握Python中字典的使用。运用jieba库进行中文分词并进行文本词频统计。…...
米贸搜|如何设置 Facebook 转换 API + 事件重复数据删除
Facebook Pixel 可让您跟踪用户在您网站上的行为、收集再营销受众并创建相似对象。如果 Facebook 像素实现正确,它将向 FB 机器学习算法提供相关信息。 FB ML 将使用像素数据向最有可能转化的人展示您的广告。 几年来,我们可以通过 JavaScript 代码、应…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
