关键字:
KFS,实时同步,过滤器
概述
KFS源端的工作流分为两个阶段:binlog-to-q和q-to-kufl。binlog-to-q阶段,KFS从源端的数据库日志中抽取增量数据,经过extractor模块解析封装后,以DBMSEvent的形式在内存队列queue中暂存,此阶段的主要工作是将数据库的元组信息抽取转化为DBMSEvent,我们称此阶段为“解析”阶段。对于全部的数据库操作,我们都要进行抽取解析吗?并不是,根据业务需求的不同,我们会选择需要的操作来进行解析,为了应对不同的业务需求,KFS提供了许多过滤器来进行操作过滤。
过滤器
我们知道JavaWeb的三大组件之一就是过滤器(Filter),使用它可以对请求进行拦截,也可以响应进行处理,KFS中的过滤器在功能上与之类似,也是用来实现特定操作的过滤,例如我们可以使用dropstatement过滤器来过滤掉DDL语句(即不让DDL语句进行同步)。
KFS中的过滤器
- replicate
作用:用于配置指定/忽略指定表的同步(注:该过滤器只针对DML数据的处理,DDL不支持)
配置(flysync.ini文件中):
svc-remote-filter=replicate
property=replicator.filter.replicate.ignore=
property=replicator.filter.replicate.do= property=replicator.filter.replicate.filePrefix=${replicator.home.dir}/support/filters-config/table
- skipeventbytype
作用:用于指定表DML类型的过滤
配置(flysync.ini文件中):
svc-extractor-filters=skipeventbytype property=replicator.filter.skipeventbytype.definitionsFile=${replicator.home.dir}/support/filtersconfig/skipeventbytype.json
- custompkey
作用:该参数用于无主键表在kufl生成时指定主键生成(即指定的普通列会以key形成在kufl记录)
配置(flysync.ini文件中):
svc_extractor_filters=custompkey property=replicator.filter.custompkey.definitionsFile=${replicator.home.dir}/support/filtersconfig/custompkey.json
- bic
作用:用于配置前项值(即在KUFL生成具有前项值的信息)
配置(flysync.ini文件中):
property=replicator.extractor.dbms.getBeforeCols=true #
该参数主要声明是否获取全列的前项值,该参数设置为true以后beforeColsRule.json中的配置设定无效
property=replicator.filter.bic.includeAllCols=false
- dropstatement
作用:过滤DDL语句(即不让DDL语句进行同步)
配置(flysync.ini文件中):
svc_extractor_filters=dropstatementdata
- ddlSupport
作用:指定过滤不同的DDL语句
配置(flysync.ini文件中):
svc_extractor_filters=ddlSupport property=replicator.filter.ddlSupport.definitionsFile=${replicator.home.dir}/support/filtersconfig/ddl_support.json
- casetransform
作用:大小写转换(对于DML可以转换模式名,表名,对于DDL只能转换模式名,且DDL语句中的显示声明的模式名无法转换)
配置(flysync.ini文件中):
svc-remote-filters=casetransform # 设置为true转大写,设置为false转小写 property=replicator.filter.casetransform.to_upper_case=true
- rename
作用:进行DML语句中模式,表,列名的重命名
配置(flysync.ini文件中):
svc-remote-filters=rename property=replicator.filter.rename.definitionsFile=${replicator.home.dir}/support/filtersconfig/rename.csv
- dropcolumn
作用:用于过滤指定列的数据
配置(flysync.ini文件中):
svc-remote-filters=dropcolumn property=replicator.filter.dropcolumn.definitionsFile=${replicator.home.dir}/support/filtersconfig/dropcolumn.json
- triming
作用:字符串除去空格
配置(flysync.ini文件中):
svc-remote-filters=trimstring property=replicator.filter.trimstring.definitionsFile=${replicator.home.dir}/support/filtersconfig/trimstring.json
- skipeventbyvalue
作用:值过滤
配置(flysync.ini文件中):
svc-remote-filters= skipeventbyvalue property=replicator.filter.skipeventbyvalue.definitionsFile=${replicator.home.dir}/support/filtersconfig/skipeventbyvalue.json
- failurepolicy
作用:全局错误处理
配置(flysync.ini文件中):
故障时全局处理策略: property=replicator.applier.failure_policy=stop
其中取值: ① stop:出现错误时,输出错误日志,并停止同步服务
②warn:出现错误时,输出警告日志,不停止不同服务
- enable_handle_error
作用:非全局错误处理
配置(flysync.ini文件中):
property=replicator.applier.dbms.enable_handle_error=false property=replicator.applier.failure_policy_ file =${replicator.home.dir}/support/filtersconfig/failure_policy_code.json 取值为:true/false 设置为true,表示开启错误处理,通过编辑failure_policy_code.json文件进行配置相关的错误处理方式。
- conflictresolverule
作用:冲突处理
配置(flysync.ini文件中):
property= replicator. applier.dbms.conflictResolve=false(关闭为false,开启为true) property= replicator. applier.dbms.beforeColsFile=${replicator.home.dir}/support/filtersconfig/conflictResoveRule.json(conflictResolve为true时生效)
- connectionIntervals
作用:指定目标端从源端拉取KUFL文件的时间段,对于同一个源端,不同的目标端可以设置不同策略
配置(flysync.ini文件中):
svc_remote_filters=connectionIntervals property=replicator.filter.connectionIntervals.intervals=9:00:00-10:00:00,20:00:00-23:00:00
- replaceStatement
作用:进行异构DDL同步时,通过正则匹配更换对应的DDL需要更换的内容
配置(flysync.ini文件中):
svc_remote_filters=replaceStatement property=replicator.filter.replaceStatement.definitionsFile=/home/hes/flysync_test/filtersconfig/replaceStatement.json
- connectionIntervals
作用:同步DDL语句时,将DDL语句记录到指定的文件中
配置(flysync.ini文件中):
svc_remote_filters=logddl
#DDL文件编码
property=replicator.filter.logddl.charset=UTF-8
#DDL文件路径 property=replicator.filter.logddl.outputDirectory={service.name}
#文件大小,单位(字节)
property=replicator.filter.logddl.sqlFileSize=2
#文件前缀
property=replicator.filter.logddl.sqlFilePrefix=kfs.ddlSql_
#文件后缀(仅能使用注释中的两个选项其中之一)
#0 :0000000001,0000000002
#1 :1,2 property=replicator.filter.logddl.sqlFileSuffix=0
#文件更新的判断标准(size:文件大小,time:文件存留时间(以小时hour计,或以天数day计))
property=replicator.filter.logddl.rotateType=size
#文件更新时间判断标准(小时计:hour;天数计:day) property=replicator.filter.logddl.timelag=day
#文件存留时间(单位:天)
property=replicator.filter.logddl.sqlFileRetention=7d