TcaplusDB OMS控制台 - 设置表缓写

1. 功能说明

用于将TcaplusDB中的数据同步到外部系统(如MySQL、Kafka等)。

2. 操作步骤

业务管理--表管理--选择要配置缓写的表--编辑。

填写缓写配置及目的端配置。

页面上全部按要求填写好之后,点击提交按钮,将会跳转到事务页面,通过事务页面,可以获取到缓写是否配置成功。

  • 若事务页面最终显示状态是完成的时候,表示成功配置了缓写;
  • 若事务页面最终显示的状态是挂起或者异常结束时,表示配置缓写失败,需要人工找寻失败的原因,并重新配置;

2.1. 缓写配置说明

  • 机器选择: 自动模式(业务下不少于两个tcapdb就不会再安装新的tcapdb进程),手动模式(必须指定机器安装新的tcapdb进程) 推荐自动模式
  • 缓写周期: 一条记录隔多长时间从tcapsvr同步到tcapdb;
  • 应用对象: 请选择Slave;

2.2. 缓写目的端类型

  1. Mysql:源数据写入mysql数据库,可配置分表个数及字段的映射关系。

  • 数据库地址: 填写数据库所在机器的ip以及端口号;
  • 数据库账号: 填写建立数据库的账号;
  • 数据库密码: 填写数据库的密码;
  • 数据库名称: 填写数据库的名称;
  • 表名前缀: 请填写在数据库中建立的表的前缀;
  • 分表个数: 填写在数据库中建立的表的分表个数,默认一个子表,配置缓写后Mysql中的表名会带上_0,多个子表的话就是 _0 _1 ...... *_n;
  • key字段映射关系: 数据库字段请填写数据库中所建立的表的各个key字段名(必须与xml中定义的字段名相同),目前key字段必须全部选择;
  • Value字段映射关系: 数据库字段请填写数据库中所建立的表的各个Value字段名(必须与xml中定义的字段名相同),并勾选需要导入的字段名;

  • GCS:类似Mysql,可配置分表个数及字段的映射关系。

  1. Kafka:数据缓写进kafka队列中。

3. 注意事项

  1. 业务需要上架tcapdb才能配置缓写。
  2. 已经配置分布式索引的表需要删除索引才能配置缓写。
  3. 目前一个tcapdb只能支持一个tcaplus的表。
  4. 已配置缓写的表,后续进行表变更操作不影响已配置的缓写。对于后续表变更新加的value字段,如果缓写需要加上新增字段请联系DBA重新配置缓写
  5. list表不支持缓写

4. 缓写方案介绍

img

​ 表数据缓写服务是指Tcaplus的增量数据可以缓写到第三方系统(目前支持MySQL和Kafka),用作产品数据查询与分析。其原理为Tcapsvr将(从启用缓写开始的)增量写入数据(基于Tcaplus Binlog)同步到Tcapdb,Tcapdb再写入/更改到MySQL或者Kafka中。所以该功能必须保证Tcapdb机器有访问MySQL或者Kafka的权限,如果是MySQL,还要有MySQL的建表权限,否则改功能无法配置成功。MySQL 、Kafka两种缓写的区别及适用Case:

  1. 同一张表MySQL和Kafka只能配置一种。MySQL或者Kafka地址都需要业务提供,并确保Tcaplus有相关访问权限。
  2. MySQL缓写适用于业务想要获取指定表(可以是全部字段,也可以是部分字段)相对实时数据,配置缓写时间窗口N,Tcaplus将最近N秒内的写请求做合并,相同记录保留最后一次更新的数据发给Tcapdb->MySQL。时间窗口N,对于MySQL默认30s,也可以给的更大或者更小,看业务对实时性的要求。给0也可以,给0就不会做合并了,这样不利于性能优化。
  3. Kafka缓写适用于业务想要订阅指定表(可以是全部字段,也可以是部分字段)的变更动作,Tcaplus将变更前后的数据发给Tcapdb->Kafka。时间窗口N,对于Kafka默认0s。
  4. 使用MySQL缓写的业务基本都能接受分钟级别的延迟,所以MySQL缓写默认是在Slave上做的,对于在线服务的影响小,但配置Mysql缓写时可以设置"缓写周期"为0,表示不希望延迟。选使用Kafka缓写的业务一般对实时性要求比较高,Kafka缓写默认是在Master上做的,会消耗一些Master的处理能力 。

特别说明:

  1. Tcaplus缓写功能只会同步缓写启用之后的增量数据及修改到第三方系统,缓写没有启用之前的数据是没有同步过去的,这部分数据如果也希望同步的话需要DBA拉取冷备,将Tcaplus引擎文件dump出来导入进第三方系统,再开启缓写。
  2. 目前,整个缓写流程的性能瓶颈在于Tcapsvr同步线程的CPU,Tcapsvr侧单机缓写QPS最大可达到8w/s。Tcapdb侧的能力可以水平扩展不是瓶颈。

其中:

  1. 缓写周期:即上面讲到的“缓写时间窗口N”,代表数据用户可以接受的数据从Tcapdb同步到第三方系统的延迟,这个值越大,代表用户对时延越不敏感。Tcapdb侧会对缓写周期时间窗口内的请求做去重(例如,30s内对同一个key的记录有多次Replace操作,去重后只需要将最后一次Replace后的内容同步给第三方系统,前两次的都不用同步过去了,可以省去前两次的请求),从而降低整体同步的QPS提升性能。
  2. key字段映射:Tcaplus表key字段到MySQL表或者Kafka的key字段的映射,无特别要求的话两个系统的表字段最好保持一致,利于定位问题。不支持二进制类型的key字段(即tdr中的数组、二级字段,pb中的 bytes 、repeated等类型)缓写。对于MySQL缓写,key字段必须全部选中。对于Kafka缓写,可以只选择部分key字段,配置上生效后还能再动态调整变更,选择部分字段的话Tcaplus只会将包含这些字段的变更同步给Kafka,建议key字段全选。
  3. value字段映射:Tcaplus表value字段到MySQL表或者Kafka的value字段的映射,无特别要求的话两个系统的表字段最好保持一致,利于定位问题。value字段如果是二进制类型,会以binary同步到MySQL或者Kafka,需要用户自己反序列化解析。对于MySQL缓写和Kafka缓写,value字段可以选择全部字段,也可以选择部分字段,选择部分字段的话Tcaplus只会将包含这些字段的变更同步给MySQL或者Kafka。配置上生效后还能再动态调整变更。
  4. Tcaplus发给Kafka的消息类型如下:
INSERT:
   {
   "timestamp":"xxxx",//更新tcaplus记录的时间
   "type": "insert",
   "appid": "app1",
   "zoneid": "zone1",
   "table": "test_table",
   "keyfields":"k1,k2,k3",
   "NewRecord":{"k1":"key1","k2":"key2","k3":"key3",
          "v2":"Tom","v4":"10"}
   }

   DELETE:
   {
   "timestamp":"xxxx",//更新tcaplus记录的时间
   "type": "delete",
   "appid": "app1",
   "zoneid": "zone1",
   "table": "test_table",
   "keyfields":"k1,k2,k3",
   "OldRecord":{"k1":"key1","k2":"key2","k3":"key3",
          "v2":"Tom","v4":"5"}
   }

   UPDATE:
   {
   "timestamp":"xxxx",//更新tcaplus记录的时间
   "type": "update",
   "appid": "app1",
   "zoneid": "zone1",
   "table": "test_table",
   "keyfields":"k1,k2,k3",
   "OldRecord":{"k1":"key1","k2":"key2","k3":"key3",
          "v2":"Tom","v4":"5"}
   "NewRecord":{"k1":"key1","k2":"key2","k3":"key3",
          "v2":"Tom","v4":"10"}
   }

results matching ""

    No results matching ""