思路
Spark对SQLserve监控一旦不单只有增量监控(指增删改查全要监控)后,据我所知,目前就我个人想法只有两方面入手
一个是不断遍历该表然后新表对比后表,即可准实时实现变化追踪,这样的实现方法最简单,但其消耗资源与时间是非常严重的.尤其当源表十分庞大时,这做法就显得相当不理智了.(其实这方法本来就不理智)
第二个则是利用SQLserver的CDC功能让其自主监控源表并生成一个只会出现增量变化的CDC表,通过 flume-ng-sql-source(这是一个大咖自主写的 第三方flume中source组件) flume-kafka监控该表并传至spark进行分析
实现
1.开启代理服务器。
SqlServer启用CDC功能必须开启代理服务器!!!
SqlServer启用CDC功能必须开启代理服务器!!!
SqlServer启用CDC功能必须开启代理服务器!!!
2.创建CDC表
本次范例源表为test库里的table1表
1.开启数据库的监控功能
检测源表所在数据库是否开启监控,因为想监控源表必须先开启源表所在数据库的监控
命令为
select name,is_cdc_enabled from sys.databases
从上图我们可以看到test库状态为0,即未开启监控。因此需要我们转到库下开启监控
use test
go
exec sp_cdc_enable_db
select name,is_cdc_enabled from sys.databases
我们可以看到test状态由0成功变成1,说明我们已开启test库的监控功能
2.设置监控表
输入以下命令
use test
exec sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'table1',
@role_name = cdc_admin,
@index_name = NULL,
@supports_net_changes = 1
运行,我们便会看到以下画面
说明我们监控文件创建成功,刷新test数据库我们可以看到
可以看到在系统表中生成一个cdc.dbo_table1_CT的监控表,
源表table1格式
当我我们在table1中添加新内容如 id 18 name 蔡徐坤打篮球
table1
可见监控表成功追踪到了我们的增量操作,如何在该表查看我们的操作状态呢?在_$operation列中可以查看
1 = delete,2 = insert,3 = update(旧值),4 = update(新值)。
注增加或删除操作只会增添一行,而修改则会增添2行,第一行为旧值而第二行为修改的新值
3.flume中添加第三方包
我们都知道flume是一个非常好的监控工具,但是flume官网里并没有找到可以直接连接SQLserver功能,因此我们需要自行添加该功能的工具包flume-ng-sql-source
小编这里整理了一些相关的学习资料和学习视频,可免费领取。
加微信:18410263200
通过验证备注:111(备注必填,方便通过)