【本文正在参与炫“库”行动-人大金仓有奖征文】
活动链接: https://marketing.csdn.net/p/98bd30353e7cb998b6070a89e8b91edb
1、KFS目标端支持Kafka
金仓异构数据同步软件Kingbase FlySync(简称KFS),向目标端(Kafka)同步数据时,主要向Kafka同步三类数据:
A 、DDL语句:
B、DML语句,包括用户表的数据更新、KFS中间表的数据更新
C、源端提交事务时的相关数据,例如:服务名,模式名,seqno等
2、目标端支持Kafka-同步结构设计2.1 整体同步结构设计
注:Kingbase Flysync的KUFL是将从不同数据库中抽取的数据操作信息以一种统一的数据存储格式进行存放的一系列中间文件,它是独立于任何数据库的可传输数据格式。
2.2 目标端拓扑规则
KFS V1R6目前支持的拓扑结构,包括:
1) 1 :1 (1为Kafka)
2)1 :N(N中可以全部为Kafka,也可以部分为Kafka)
3)N :1(1为Kafka)
4)级联(中间节点和最终节点,都可以是Kafka)
3、目标端支持Kafka-相关配置介绍
3.1、基础配置
KFS的配置文件是:flysync.ini文件,Kafka作为目标端,基础配置如下:
[defaults]
install-directory=/home/kafka/slavenode
profile-script=~/.bash_profile
rmi-port=11000
[kafka]
role=slave
master=192.168.180.133
master-kufl-port=3033
members=192.168.180.133
kufl-port=3233
replication-host=192.168.180.133
replication-port=9092
#链接kafka的用户名
replication-user=kesuser
#链接kafka的密码,无就写null
replication-password=null
datasource-type=kafka
3.2、高阶配置
#是否嵌入事务信息 (true/flase),默认 false
property=replicator.applier.dbms.enabletxninfo=true
#是否开启事务信息 topic(true/flase),默认 false
property=replicator.applier.dbms.enabletxninfoTopic=true
#事务信息 topic 名称,默认 flysync_transactions
property=eplicator.applier.dbms.txninfoTopic=flysync_transactions
#将所有DML和DDL都发送至Kafka的同一个topic,默认flysync_test
property=replicator.applier.dbms.singleTopicName=flysync_test
#将所有DDL都发送至Kafka的同一个topic,默认flysync_ddl
#如果已经配置singleTopicName,则ddlTopic配置无效
property=replicator.applier.dbms.ddlTopic=flysync_ddl
4、目标端支持Kafka-消息在Topic中的存储规则
Kingbase Flysync目前采用将DML/DDL/事务信息封装为JSON的方式,和Kafka进行通信。和Kafka通信时,topic既可以使用数据库模式名,也可以使用用户统一配置的topic。
4.1、KFS在Kafka中创建Topic的规则
当ini文件中只配置基础配置时,KFS在目标端Kafka默认新建如下Topic:
flysync_transactions :用于记录事务信息(用户可以通过txninfoTopic参数修改该topic名称)
flysync_ddl :用于记录所有DDL信息(用户可以通过ddlTopic参数修改该topic名称)
{SCHEMA}_{TABLE} :对每张表(包括用户建立的表或KFS的中间表),当有数据更新时,KFS默认在Kafka中建立一个topic,名称是:表所在模式的模式名+“_”+表名
当ini文件中有singleTopicName配置时,还会在Kafka中新建如下Topic
flysync_test:用于记录所有的DDL和DML信息(用户可以通过singleTopicName参数修改topic名称)
4.2、消息在Topic中存储规则A、如果enabletxninfoTopic配置为true,则目标端接收源端发送的事务相关信息,默认是存储到flysync_transactions中(如果ini配置文件中设置了新的topic,则存储到对应的topic)
B、 如果没有配置singleTopicName,则:
1)目标端接收DML消息后,默认存储到每张表对应的topic中(topic命名规则见4.3),DML示例如下:
2)目标端接收DDL消息发,默认存储到flysync_ddl中(如果ini配置文件中设置了新的topic名称,则发送到对应的topic),DDL示例如下:
C、如果配置了singleTopicName,在目标端接收到DML和DDL后,都只存储到flysync_test(如果ini配置文件中设置了新的topic名称,则发送到对应的topic),而不再存储到flysync_ddl和每张表对应的topic中
5、目标端支持Kafka-限制和约束A、KFS数据同步DDL时,暂时只支持部分数据源同步DDL功能
KFS V1R6 目前支持同步DDL的数据源包括:
1)Kingbase V7
2)Kingbase V8(包括:v8r3、v8r6、v8r6pg)
3)Oracle(redo形式)
4)PG
源端如果设置dropstatementdata参数,那么在源端会过滤掉所有DDL语句,则向Kafka同步的信息中,将不包含DDL语句
B、目标端是Kafka时,仅支持实时同步,不支持初始搬迁和数据比对功能
C、受Kafka本身对topic名称限制,自定义topic名称命名受如下限制
1)字母或者下划线开通,后面跟字母、数字、下划线、中划线、点
2)不支持中文字符作为表名或模式名
D、如果没有配置Kafka集群时,Kafka本身掉电可能会导致Kafka数据丢失
6、结束语
KFS支持目标端Kafka后,可以将源端数据库的操作(DML/DDL),通过KFS传递到Kafka,而Kafka以高容错的方式有序、持久的存储KFS同步的数据流,既可以在源端数据库发生异常时,提供必要信息进行追踪/恢复,对数据库的数据安全起到了一定作用;同时Kafka可以将存储的数据流提供给不同的消费者进行消费,从而有效的降低了应用直接访问数据库对数据库的压力。



