insert执行成功 没有数据_Otter数据同步在自动化稽核系统的使用

一、Otter在稽核系统的使用背景 由于自动化稽核系统承接的稽核业务越来越多,比如新架构CB稽核、迁转稽核等等。导致目前稽核系统承载的稽核任务的数量极速上涨,支撑稽核任务的亦庄spark集群已经不能满足上千个稽核任务的执行和完成的效率要求。为了解决这个问题,稽核组的同事采用了跨集群迁移稽核任务的办法,即将部分稽核任务迁移至西咸的spark集群执行。 目前稽核系统的结果数据是落地到MySQL中,亦庄的spark集群对应的28MySQL数据库部署在亦庄机房,由于西咸spark集群和亦庄主机之间互通需要打通网络,如直接打通西咸spark集群和28MySQL数据库所在主机的网络,需要打通几十个主机的互通,且后期西咸spark集群修改或者增加节点,还需要继续打通网络。为了减少打通网络的代价,为西咸的spark集群部署了134MySQL数据库,只需打通28MySQL数据库所在主机和134MySQL数据库所在主机的网络,把西咸spark集群得出的稽核结果数据线落地到134MySQL数据库,再通过Otter同步到28MySQL数据库。最终稽核系统的前台页面通过与28MySQL数据库 连接 ,把稽核的结果展示在稽核系统中。 二、Otter在稽核系统中的使用场景 1、数据单向同步: 稽核配置数据同步 通过Otter把稽核任务相关的配置信息同步到西咸的134MySQL数据库,用于稽核任务在西咸spark集群进行正常的调度执行。主要包含稽核点、稽核指标、稽核因子、稽核任务前置信息定义、稽核任务、稽核作业、稽核规则、稽核规则环境变量、稽核规则模板、spark资源配置表等信息。 稽核结果数据回传 通过otter回传西咸的134MySQL数据库结果数据到亦庄的28MySQL数据库,回传的表主要包含稽核新老架构异常数据明细表、稽核因子结果表、稽核点执行日志表、作业执行日志表等等。

2、数据单向同步:

Otter的双向同步主要包含两种:双向同步、双A同步。这两个概念在otter的页面上是通过是否有配置主站点来区分的。有配置主站点的话就是双A同步,否则是双向同步。双A同步会有数据回环的问题,双向同步不会。

目前稽核系统使用的是双向同步,主要是使用场景是表。对于西咸集群缺少且不能进行采集的数据源,通过亦庄集群进行采集到亦庄HDFS中,然后采集结束后,再新增一个文件转移任务到接口机,文件转移完毕后调用执行在西咸集群上的quickjob,对接口机上文件的采集入库到西咸的HDFS。首先通过Otter把稽核系统的的quickjob配置信息由28MySQL数据库同步至西咸的134MySQL数据库中。在调用西咸侧的quickjob时,实际是通过程序去修改28MySQL数据库的quickjob的状态(状态变为0),然后把状态同步至134MySQL数据库中(状态变为0),去触发quickjob的执行(状态由0变为3),在执行完毕后,程序会修改134MySQL数据库quickjob的状态为执行完毕(状态由3变为1),然后把执行完毕的状态同步回28MySQL数据库中,方便下次再次在28MySQL去触发该quickjob的执行。

若表不使用双向同步,28MySQL库的quickjob的状态变为0后,quickjob在134MySQL数据库中后续的状态变化都不再接收,始终为0,当下一次在28MySQL再次触发时,状态还是修改为0,对于28MySQL库中这一条数据的变化是状态由0变为0,实际是没有变化,因此就不会同步这条数据到134MySQL数据库中,就无法调用西咸集群中的quickjob的执行。

三、Otter原理探索 原理描述:

de2391ef4c428a48d188cab13d941f30.png

图1 Otter原理概览

Otter主要是基于开源产品canal,通过canal获取数据库的binlog日志的数据库操作信息。

管理系统架构:manager+node,node节点中通过S(select)与canal接入,然后进行ETC(extract/transform/load)数据提取转换和加载,node节点将同步状态反馈到manager上,manager运行时推送同步到node节点。基于Zookeeper,解决分布式调度问题,允许多个node节点之间协同工作。

Canal原理:

9c4bc2d029c126d9a1991dc05af740ac.png

图2 Canal原理示意图

Canal基于数据库增量日志解析以及MySQL主从复制原理。

Master将改变记录到二进制日志(binlog)中。

Canal模拟MySQL Slave的交互协议,伪装自己为MySQL Slave,向MySQL Master发送dump协议。

MySQL Master收到dump请求,开始推送binlog给Slave(canal)。

Canal解析binlog对象(原始为byte流), 拷贝到自己的中继日志(relay log)。

Slave重做relay log中的事件,将改变反应到自己的数据库中,实现数据的同步。

四、Otter数据入库算法
数据合并:
1.insert + insert -> insert ( 数据迁移+数据增量场景) 2.insert + update -> insert  (update 字段合并到insert) 3.insert + delete -> delete 4.update + insert -> insert ( 数据迁移+数据增量场景) 5.update + update -> update 6.update + delete -> delete 7.delete + insert -> insert 8.delete + update -> update ( 数据迁移+数据增量场景) 9.delete + delete -> delete insert/update 行记录,执行merge sql,解决重复数据执行 合并算法执行后,单pk主键只有一条记录,减少并行load算法的复杂性(比如batch合并,并行/串行等处理) 数据入库算法: 入库算法采取了按pk hash并行载入+batch合并的优化 1 、打散原始数据库事务,预处理数据,合并insert/update/delete数据(参见合并算法),然后按照table +pk进行并行(相同table的数据,先执行delete,后执行insert/update,串行保证,解决唯一性约束数据变更问题),相同table的sql会进行batch合并处理。 2 、提供table权重定义,根据权重定义不同支持"业务上类事务功能",并行中同时有串行权重控制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值