人大金仓KFS实时同步-过滤器的使用

99 阅读3分钟

关键字:

KFS,实时同步,过滤器

概述

KFS源端的工作流分为两个阶段:binlog-to-q和q-to-kufl。binlog-to-q阶段,KFS从源端的数据库日志中抽取增量数据,经过extractor模块解析封装后,以DBMSEvent的形式在内存队列queue中暂存,此阶段的主要工作是将数据库的元组信息抽取转化为DBMSEvent,我们称此阶段为“解析”阶段。对于全部的数据库操作,我们都要进行抽取解析吗?并不是,根据业务需求的不同,我们会选择需要的操作来进行解析,为了应对不同的业务需求,KFS提供了许多过滤器来进行操作过滤。

过滤器

我们知道JavaWeb的三大组件之一就是过滤器(Filter),使用它可以对请求进行拦截,也可以响应进行处理,KFS中的过滤器在功能上与之类似,也是用来实现特定操作的过滤,例如我们可以使用dropstatement过滤器来过滤掉DDL语句(即不让DDL语句进行同步)。

KFS中的过滤器

  1. 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

  1. skipeventbytype

作用:用于指定表DML类型的过滤

配置(flysync.ini文件中):

svc-extractor-filters=skipeventbytype property=replicator.filter.skipeventbytype.definitionsFile=${replicator.home.dir}/support/filtersconfig/skipeventbytype.json

  1. custompkey

作用:该参数用于无主键表在kufl生成时指定主键生成(即指定的普通列会以key形成在kufl记录)

配置(flysync.ini文件中):

svc_extractor_filters=custompkey property=replicator.filter.custompkey.definitionsFile=${replicator.home.dir}/support/filtersconfig/custompkey.json

  1. bic

作用:用于配置前项值(即在KUFL生成具有前项值的信息)

配置(flysync.ini文件中):

property=replicator.extractor.dbms.getBeforeCols=true #

该参数主要声明是否获取全列的前项值,该参数设置为true以后beforeColsRule.json中的配置设定无效

property=replicator.filter.bic.includeAllCols=false

  1. dropstatement

作用:过滤DDL语句(即不让DDL语句进行同步)

配置(flysync.ini文件中):

svc_extractor_filters=dropstatementdata

  1. ddlSupport

作用:指定过滤不同的DDL语句

配置(flysync.ini文件中):

svc_extractor_filters=ddlSupport property=replicator.filter.ddlSupport.definitionsFile=${replicator.home.dir}/support/filtersconfig/ddl_support.json

  1. casetransform

作用:大小写转换(对于DML可以转换模式名,表名,对于DDL只能转换模式名,且DDL语句中的显示声明的模式名无法转换)

配置(flysync.ini文件中):

svc-remote-filters=casetransform # 设置为true转大写,设置为false转小写 property=replicator.filter.casetransform.to_upper_case=true

  1. rename

作用:进行DML语句中模式,表,列名的重命名

配置(flysync.ini文件中):

svc-remote-filters=rename property=replicator.filter.rename.definitionsFile=${replicator.home.dir}/support/filtersconfig/rename.csv

  1. dropcolumn

作用:用于过滤指定列的数据

配置(flysync.ini文件中):

svc-remote-filters=dropcolumn property=replicator.filter.dropcolumn.definitionsFile=${replicator.home.dir}/support/filtersconfig/dropcolumn.json

  1. triming

作用:字符串除去空格

配置(flysync.ini文件中):

svc-remote-filters=trimstring property=replicator.filter.trimstring.definitionsFile=${replicator.home.dir}/support/filtersconfig/trimstring.json

  1. skipeventbyvalue

作用:值过滤

配置(flysync.ini文件中):

svc-remote-filters= skipeventbyvalue property=replicator.filter.skipeventbyvalue.definitionsFile=${replicator.home.dir}/support/filtersconfig/skipeventbyvalue.json

  1. failurepolicy

作用:全局错误处理

配置(flysync.ini文件中):

故障时全局处理策略: property=replicator.applier.failure_policy=stop

其中取值: ① stop:出现错误时,输出错误日志,并停止同步服务

②warn:出现错误时,输出警告日志,不停止不同服务

  1. 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文件进行配置相关的错误处理方式。

  1. 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时生效)

  1. 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

  1. replaceStatement

作用:进行异构DDL同步时,通过正则匹配更换对应的DDL需要更换的内容

配置(flysync.ini文件中):

svc_remote_filters=replaceStatement property=replicator.filter.replaceStatement.definitionsFile=/home/hes/flysync_test/filtersconfig/replaceStatement.json

  1. connectionIntervals

作用:同步DDL语句时,将DDL语句记录到指定的文件中

配置(flysync.ini文件中):

svc_remote_filters=logddl

#DDL文件编码

property=replicator.filter.logddl.charset=UTF-8

#DDL文件路径 property=replicator.filter.logddl.outputDirectory=replicator.home.dir/ddlsqlfile/{replicator.home.dir}/ddlsqlfile/{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