CN112527799B - 一种基于flink实现分布式实时同步SqlServer数据库的方法 - Google Patents
一种基于flink实现分布式实时同步SqlServer数据库的方法 Download PDFInfo
- Publication number
- CN112527799B CN112527799B CN202011493344.2A CN202011493344A CN112527799B CN 112527799 B CN112527799 B CN 112527799B CN 202011493344 A CN202011493344 A CN 202011493344A CN 112527799 B CN112527799 B CN 112527799B
- Authority
- CN
- China
- Prior art keywords
- data
- database
- task
- information
- checking
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于flink实现分布式实时同步SqlServer数据库的方法,包括如下步骤:1)配置数据源信息及任务相关参数信息;2)插件端校验数据源及任务相关信息接口;3)构建数据库监听接口;4)数据捕捉及解析接口;5)基于flink实现分布式数据同步。本发明对于现有技术而言,通过简单的任务参数配置,可以快速实现对SqlServer数据库表数据的实时采集功能。
Description
技术领域
本发明涉及一种基于flink实现分布式实时同步SqlServer数据库的方法。
背景技术
目前,现有的采集SqlServer数据库数据的技术是基于数据库增量字段,每隔一段时间查询数据库的数据,因此该技术不能实时捕捉SqlServer数据库变更的数据。
发明内容
为了实时捕捉SqlServer数据库变更的数据,本发明提供了一种基于flink实现分布式实时同步SqlServer数据库的方法。
一种基于flink实现分布式实时同步SqlServer数据库的方法,包括如下步骤:
1)配置数据源信息及任务相关参数信息;
2)插件端校验数据源及任务相关信息接口;
3)构建数据库监听接口;
4)数据捕捉及解析接口;
5)基于flink实现分布式数据同步。
进一步的,所述步骤2)包括如下步骤:
2.1)解析提交的json,内容包括任务的数据源链接、账号、密码、采集的类型以及表信息;
2.2)校验username,若为空则抛出IllegalArgumentException异常;校验password,若为空则抛出IllegalArgumentException异常;校验url,若为空则抛出IllegalArgumentException异常;校验databaseName,若为空则抛出IllegalArgumentException异常;校验tableList,若为空则抛出IllegalArgumentException异常;校验cat,若为空则抛出IllegalArgumentException异常;
2.3)通过执行命令,检测SqlServer数据库是否开启了变更数据捕获功能,若未开启则任务终止并提示用户数据库未开启变更数据捕获功能。
2.4)通过执行命令,去数据库中查询所有已经开启变更数据捕获功能的表,然后与配置的tableList的表逐个进行对比,检测用户配置的表在SqlServer数据库是否启用了变更数据捕获功能,若存在未启用变更数据捕获功能的表则任务终止并提示用户具体哪张表未开启变更数据捕获功能。
进一步的,所述步骤3)包括如下步骤:
3.1)获取上一步中校验通过的参数信息,将传入的cat字符串数组转化为对应的编号,注册采集数据类型的实例;
3.2)通过Duration.of方法,将传入的间隔参数构建出微秒级别的时间时钟;
3.3)查询数据库中启动变更数据捕获功能的表信息,并与用户配置的表进行对比,过滤出需要采集的表信息储存在白名单中;
3.4)根据白名单中的表的数据库名称、schema名称和表名称,计算出源表id以及源表的指针数组,存储在缓存中。
进一步的,所述步骤4)包括如下步骤:
4.1)插件端启动一个线程,该线程会在每一次循环结束休眠指定的时间;
4.2)当线程第一次启动的时候会执行SELECTsys.fn_cdc_get_max_lsn()语句,从数据库中查询并记录当前数据库中最大的日志序列号lsn;
4.3)通过判断lsn二进制字段binary是否为null来校验当前最大日志序列号是否可用;若不可用则说明数据库代理服务没有启动;任务将每隔一段时间等待并输出警告日志信息直到代理服务启动;
4.4)比较当前最大日志序列号与记录的序列号,若相等,则说明数据库中无数据变更;线程休眠并进入下一次的循环;
4.5)根据当前最大日志序列号与记录的日志序列号,使用SELECT*FROM cdc.[fn_cdc_get_all_changes_#](ISNULL(?,sys.fn_cdc_get_min_lsn('#')),?,N'all updateold')语句查询出区间内所有变更的数据信息;
4.6)根据缓存中的源表指针ChangeTablePointer及id来获取具体的changeTable,通过对比lsn和table id来判断当前changeTable是否为需要捕获的表;如果是,则从当前ChangeTablePointer中判断当前数据的类型是insert、update或者delete,并与采集类型进行对比,如果符合配置的采集类型,则通过getData方法从resultSet中获取具体的数据;
4.7)逐条解析变更的数据信息。
进一步的,所述步骤5)包括如下步骤:
5.1)构建jobgraph,将任务提交至jobmanager;
5.2)jobmanager初始化分片分发器,并根据配置的任务并行度在不同的服务器中启动对应数量的taskmanager,构建任务分布式运行的基础运行环境;
5.3)jobmanager初始化数据分片,调用数据捕捉及解析接口,开始执行数据同步任务。
本发明的有益效果是:本发明对于现有技术而言,通过简单的任务参数配置,可以快速实现对SqlServer数据库表数据的实时采集功能。
附图说明
结合附图,并通过参考下面的详细描述,将会更容易地对本发明有更完整的理解并且更容易地理解其伴随的优点和特征,其中:
图1是本发明中步骤2)的流程示意图;
图2是本发明中步骤3)的流程示意图;
图3为本发明中步骤4)的流程示意图。
具体实施方式
为使本发明的内容更加清楚易懂,以下结合说明书附图,对本发明的内容作进一步说明。当然本发明并不局限于该具体实施例,本领域内的技术人员所熟知的一般替换也涵盖在本发明的保护范围内。
实施例
一种基于flink实现分布式实时同步SqlServer数据库的方法,包括如下步骤:
1)配置数据源信息及任务相关参数信息;
2)插件端校验数据源及任务相关信息接口;
3)构建数据库监听接口;
4)数据捕捉及解析接口;
5)基于flink实现分布式数据同步。
如图1所示,所述步骤2)包括如下步骤:
2.1)解析提交的json,内容包括任务的数据源链接、账号、密码、采集的类型以及表信息;
2.2)校验username,若为空则抛出IllegalArgumentException("No usernamesupplied")异常;校验password,若为空则抛出IllegalArgumentException("No passwordsupplied")异常;校验url,若为空则抛出IllegalArgumentException("No urlsupplied")异常;校验databaseName,若为空则抛出IllegalArgumentException("NodatabaseName supplied")异常;校验tableList,若为空则抛出IllegalArgumentException("No tableList supplied")异常;校验cat,若为空则抛出IllegalArgumentException("No cat supplied")异常;
2.3)通过执行select 1from sys.databases where name='%s'AND is_cdc_enabled=1命令,检测SqlServer数据库是否开启了变更数据捕获功能,若未开启则任务终止并提示用户数据库未开启变更数据捕获功能。
2.4)通过执行select sys.schemas.name+'.'+sys.tables.name fromsys.tables,sys.schemas where sys.tables.is_tracked_by_cdc=1andsys.tables.schema_id=sys.schemas.schema_id命令,去数据库中查询所有已经开启变更数据捕获功能的表,然后与配置的tableList的表逐个进行对比,检测用户配置的表在SqlServer数据库是否启用了变更数据捕获功能,若存在未启用变更数据捕获功能的表则任务终止并提示用户具体哪张表未开启变更数据捕获功能。
如图2所示,所述步骤3)包括如下步骤:
3.1)获取上一步中校验通过的参数信息,将传入的cat字符串数组转化为对应的编号,注册采集数据类型的实例;
3.2)通过Duration.of方法,将传入的间隔参数构建出微秒级别的时间时钟;
3.3)查询数据库中启动变更数据捕获功能的表信息,并与用户配置的表进行对比,过滤出需要采集的表信息储存在白名单中;
3.4)根据白名单中的表的数据库名称、schema名称和表名称,计算出源表id以及源表的指针数组,存储在缓存中。
如图3所示,所述步骤4)包括如下步骤:
4.1)插件端启动一个线程,该线程会在每一次循环结束休眠指定的时间;
4.2)当线程第一次启动的时候会执行SELECTsys.fn_cdc_get_max_lsn()语句,从数据库中查询并记录当前数据库中最大的日志序列号lsn;
4.3)通过判断lsn二进制字段binary是否为null来校验当前最大日志序列号是否可用;若不可用则说明数据库代理服务没有启动;任务将每隔一段时间等待并输出警告日志信息直到代理服务启动;
4.4)比较当前最大日志序列号与记录的序列号,若相等,则说明数据库中无数据变更;线程休眠并进入下一次的循环;
4.5)根据当前最大日志序列号与记录的日志序列号,使用SELECT*FROM cdc.[fn_cdc_get_all_changes_#](ISNULL(?,sys.fn_cdc_get_min_lsn('#')),?,N'all updateold')语句查询出区间内所有变更的数据信息;
4.6)根据缓存中的源表指针ChangeTablePointer及id来获取具体的changeTable,通过对比lsn和table id来判断当前changeTable是否为需要捕获的表;如果是,则从当前ChangeTablePointer中判断当前数据的类型是insert、update或者delete,并与采集类型进行对比,如果符合配置的采集类型,则通过getData方法从resultSet中获取具体的数据;
4.7)逐条解析变更的数据信息,如通过SqlserverCdcEnum.getEnum(operation).name.split("_")[0]获取采集类型type,通过tableId.getSchemaName()获取schema信息,通过tableId.getTableName()获取table名称,通过tableWithSmallestLsn.getChangePosition().getCommitLsn().toString()获取日志序列号lsn,并将信息转换为符合要求的数据格式存储在hashmap中。
进一步的,所述步骤5)包括如下步骤:
5.1)构建jobgraph,将任务提交至jobmanager;
5.2)jobmanager初始化分片分发器,并根据配置的任务并行度在不同的服务器中启动对应数量的taskmanager,构建任务分布式运行的基础运行环境;
5.3)jobmanager初始化数据分片,调用数据捕捉及解析接口,开始执行数据同步任务。
Claims (3)
1.一种基于flink实现分布式实时同步SqlServer数据库的方法,其特征在于,包括如下步骤:
1)配置数据源信息及任务相关参数信息;
2)插件端校验数据源及任务相关信息接口;
所述步骤(2)包括如下步骤:
2.1)解析提交的json,内容包括任务的数据源链接、账号、密码、采集的类型以及表信息;
2.2)校验username,若为空则抛出IllegalArgumentException异常;校验password,若为空则抛出IllegalArgumentException异常;校验url,若为空则抛出IllegalArgumentException异常;校验databaseName,若为空则抛出IllegalArgumentException异常;校验tableList,若为空则抛出IllegalArgumentException异常;校验cat,若为空则抛出IllegalArgumentException异常;
2.3)通过执行命令,检测SqlServer数据库是否开启了变更数据捕获功能,若未开启则任务终止并提示用户数据库未开启变更数据捕获功能;
2.4)通过执行命令,去数据库中查询所有已经开启变更数据捕获功能的表,然后与配置的tableList的表逐个进行对比,检测用户配置的表在SqlServer数据库是否启用了变更数据捕获功能,若存在未启用变更数据捕获功能的表则任务终止并提示用户具体哪张表未开启变更数据捕获功能;
3)构建数据库监听接口;
4)数据捕捉及解析接口;
所述步骤4)包括如下步骤:
4.1)插件端启动一个线程,该线程会在每一次循环结束休眠指定的时间;
4.2)当线程第一次启动的时候会执行SELECT sys.fn_cdc_get_max_lsn()语句,从数据库中查询并记录当前数据库中最大的日志序列号lsn;
4.3)通过判断lsn二进制字段binary是否为null来校验当前最大日志序列号是否可用;若不可用则说明数据库代理服务没有启动;任务将每隔一段时间等待并输出警告日志信息直到代理服务启动;
4.4)比较当前最大日志序列号与记录的序列号,若相等,则说明数据库中无数据变更;线程休眠并进入下一次的循环;
4.5)根据当前最大日志序列号与记录的日志序列号,使用SELECT*FROM cdc.[fn_cdc_get_all_changes_#](ISNULL(?,sys.fn_cdc_get_min_lsn('#')),?,N'all update old')语句查询出区间内所有变更的数据信息;
4.6)根据缓存中的源表指针ChangeTablePointer及id来获取具体的changeTable,通过对比lsn和table id来判断当前changeTable是否为需要捕获的表;如果是,则从当前ChangeTablePointer中判断当前数据的类型是insert、update或者delete,并与采集类型进行对比,如果符合配置的采集类型,则通过getData方法从resultSet中获取具体的数据;
4.7)逐条解析变更的数据信息;
5)基于flink实现分布式数据同步。
2.如权利要求1所述的基于flink实现分布式实时同步SqlServer数据库的方法,其特征在于,所述步骤3)包括如下步骤:
3.1)获取上一步中校验通过的参数信息,将传入的cat字符串数组转化为对应的编号,注册采集数据类型的实例;
3.2)通过Duration.of方法,将传入的间隔参数构建出微秒级别的时间时钟;
3.3)查询数据库中启动变更数据捕获功能的表信息,并与用户配置的表进行对比,过滤出需要采集的表信息储存在白名单中;
3.4)根据白名单中的表的数据库名称、schema名称和表名称,计算出源表id以及源表的指针数组,存储在缓存中。
3.如权利要求2所述的基于flink实现分布式实时同步SqlServer数据库的方法,其特征在于,所述步骤5)包括如下步骤:
5.1)构建jobgraph,将任务提交至jobmanager;
5.2)jobmanager初始化分片分发器,并根据配置的任务并行度在不同的服务器中启动对应数量的taskmanager,构建任务分布式运行的基础运行环境;
5.3)jobmanager初始化数据分片,调用数据捕捉及解析接口,开始执行数据同步任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011493344.2A CN112527799B (zh) | 2020-12-17 | 2020-12-17 | 一种基于flink实现分布式实时同步SqlServer数据库的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011493344.2A CN112527799B (zh) | 2020-12-17 | 2020-12-17 | 一种基于flink实现分布式实时同步SqlServer数据库的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112527799A CN112527799A (zh) | 2021-03-19 |
CN112527799B true CN112527799B (zh) | 2022-09-13 |
Family
ID=75000973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011493344.2A Active CN112527799B (zh) | 2020-12-17 | 2020-12-17 | 一种基于flink实现分布式实时同步SqlServer数据库的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527799B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107368503A (zh) * | 2016-05-13 | 2017-11-21 | 北京京东尚科信息技术有限公司 | 基于Kettle的数据同步方法和系统 |
CN110222121A (zh) * | 2019-06-14 | 2019-09-10 | 浪潮软件股份有限公司 | 一种基于CDC方式的SQL Server数据库增量同步实现方法及系统 |
CN111274257A (zh) * | 2020-01-20 | 2020-06-12 | 山东汇贸电子口岸有限公司 | 一种基于数据的实时同步方法及系统 |
CN111339103A (zh) * | 2020-03-13 | 2020-06-26 | 河南安冉云网络科技有限公司 | 一种基于全量分片和增量日志解析的数据交换方法及系统 |
CN111382150A (zh) * | 2020-03-19 | 2020-07-07 | 交通银行股份有限公司 | 一种基于Flink的实时计算方法及系统 |
CN111782498A (zh) * | 2020-07-29 | 2020-10-16 | 杭州玳数科技有限公司 | 基于kuberntes的flink任务日志elk采集方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190171650A1 (en) * | 2017-12-01 | 2019-06-06 | Chavdar Botev | System and method to improve data synchronization and integration of heterogeneous databases distributed across enterprise and cloud using bi-directional transactional bus of asynchronous change data system |
US10594759B2 (en) * | 2017-05-09 | 2020-03-17 | EMC IP Holding Company LLC | Efficiently executing concurrent operations that depend on each other in a streaming data environment |
-
2020
- 2020-12-17 CN CN202011493344.2A patent/CN112527799B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107368503A (zh) * | 2016-05-13 | 2017-11-21 | 北京京东尚科信息技术有限公司 | 基于Kettle的数据同步方法和系统 |
CN110222121A (zh) * | 2019-06-14 | 2019-09-10 | 浪潮软件股份有限公司 | 一种基于CDC方式的SQL Server数据库增量同步实现方法及系统 |
CN111274257A (zh) * | 2020-01-20 | 2020-06-12 | 山东汇贸电子口岸有限公司 | 一种基于数据的实时同步方法及系统 |
CN111339103A (zh) * | 2020-03-13 | 2020-06-26 | 河南安冉云网络科技有限公司 | 一种基于全量分片和增量日志解析的数据交换方法及系统 |
CN111382150A (zh) * | 2020-03-19 | 2020-07-07 | 交通银行股份有限公司 | 一种基于Flink的实时计算方法及系统 |
CN111782498A (zh) * | 2020-07-29 | 2020-10-16 | 杭州玳数科技有限公司 | 基于kuberntes的flink任务日志elk采集方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN112527799A (zh) | 2021-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107506451B (zh) | 用于数据交互的异常信息监控方法及装置 | |
CN103942210B (zh) | 海量日志信息的处理方法、装置与系统 | |
CN105005618A (zh) | 一种异构数据库之间的数据同步方法及系统 | |
CN102637214B (zh) | 基于数据库服务间的通用数据同步方法及其系统 | |
CN103699580A (zh) | 数据库同步方法及装置 | |
CN103853743A (zh) | 一种分布式系统及其日志查询方法 | |
CN101441629A (zh) | 一种非结构化网页信息的自动采集方法 | |
JP2021128776A5 (zh) | ||
CN109409948B (zh) | 交易异常检测方法、装置、设备及计算机可读存储介质 | |
CN111343269B (zh) | 一种数据下载方法、装置、计算机设备和存储介质 | |
CN112507681A (zh) | 基于模板设计模式的多源异构医疗数据采集方法 | |
CN115712623B (zh) | 一种基于捕获元数据变更的批量数据容错采集方法 | |
CN105243499A (zh) | 订单分配方法及系统 | |
CN111352969B (zh) | 一种埋点数据分析方法、装置及电子设备 | |
CN107247667A (zh) | 自动化dump分析系统及方法 | |
CN110324208B (zh) | 一种数据丢失处理方法、智能终端及存储介质 | |
CN101645072A (zh) | 基于Oracle CDC技术实现的变更数据抽取方法 | |
CN112527799B (zh) | 一种基于flink实现分布式实时同步SqlServer数据库的方法 | |
CN110968592A (zh) | 元数据采集方法、装置、计算机设备及计算机可读存储介质 | |
CN105303430B (zh) | 一种交易指标采集方法及装置 | |
CN108460079B (zh) | 数据库监控方法、装置、终端设备及存储介质 | |
CN108228908B (zh) | 一种数据抽取方法及装置 | |
CN112699183A (zh) | 数据处理方法、系统、可读存储介质及计算机设备 | |
CN111242595A (zh) | Erp平台与支付平台间信息交换方法及装置 | |
CN108717438B (zh) | 一种链式数据状态采集系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 311121 room 102-1 / F, room 102-2 / F, building 6, Haizhi center, 2301 yuhangtang Road, Cangqian street, Yuhang District, Hangzhou, Zhejiang Province Applicant after: HANGZHOU DAISHU TECHNOLOGY Co.,Ltd. Address before: 310030 8F, building 2, Hangzhou Internet innovation and entrepreneurship Park, 176 Zixia street, Xihu District, Hangzhou City, Zhejiang Province Applicant before: HANGZHOU DAISHU TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |