Tapdata 是由深圳钛铂数据有限公司研发的一款实时数据处理及服务的平台产品,企业可以使用 Tapdata 快速构建数据中台和实时数仓,
Tapdata 提供了一站式的解决方案,包括实时数据采集、数据融合以及数据发布等功能和能力。

Tapdata 专注于实时数据的处理技术,在数据库迁移和同步方面,Tapdata 的表现非常优秀,实时、多元、异构,尤其在关系数据库到非关系数据库之间的双向同步方面,无论是从操作上,还是效率上,都体现了业界领先的水平。

本文重点阐述 Tapdata 在数据库实时同步方面的技术要点。

基于数据库日志的实时迁移或同步

在数据库同步场景下,Tapdata 支持批量及增量的数据迁移及同步。Tapdata 主打的是实时场景,所以在数据库增量同步上是一个关键能力。目前 Tapdata 支持的数据源,基本上都支持增量同步。大部分场景下 Tapdata 通过解析数据库日志的方式来获得源端数据库的增删改操作,然后将这些操作转化为标准的数据库事件,推送到内部处理队列。
*数据同步流程*

那么,Tapdata 是怎么样来做数据同步的呢?

第一层的数据同步是基于CDC机制,也就是说它并不是用一个 Select 语句去定期的去扫最近有什么样的数据,或者是全量把它拿过来,而是基于数据库的事务日志,比如说 Oracle 的话就是 Redo log,SQL Server 的话就是它的 CDC 机制,MongoDB 有它的那个 Oplog,然后MySQL 的话就用它的 Binlog。为了监听这些 log 日志,Tapdata 每一个数据都有一个 log parser,把它拿出来以后,当监听到变化,就会把它转化成一个 update 语句或者 insret 的语句或者 delete 语句。在目标库里面,Tapdata 还创建了 FDM ,即基础层和主数据层。把它写到目标库里面,然后通过这种方式,等于是在目标平台里面建了一个逻辑的镜像,跟源库是是能保持高度的同步的那这种方式,这种 CDC 事件的延迟一般是在几百毫秒,往往在1~2秒之内,我们就可以把数据同步到这个目标的平台,所以同步的时延是非常短的,大概率是亚秒级别。

以下是各个数据库的采集增量数据的方式

- Oracle: 通过LogMiner 对redo log/archive log解析数据库日志
- SQLServer: 通过SQLServer自带的触发器方式获取数据库事件
- MySQL: 通过解析binlog方式来获取数据库事件
- MongoDB: 通过解析Oplog方式来获取数据库事件
- DB2: 通过解析DB2日志来获取数据库事件
- PostgreSQL: 通过解析日志方式来获取数据库事件

用户在开始同步任务的时候可以使用以下模式之一:

- 全量迁移,然后紧接着增量迁移
- 仅增量同步,从指定时间点开始
- 仅增量同步,从当前时间开始

基于 Pipeline 的流数据处理模式

Tapdata 底层使用基于Hazelcast Jet 的 DAG 流处理引擎。该引擎支持基于 DAG(有向无环图)的任务链流计算能力。用户可以通过 Pipeline API 构建一个任务链的处理流程,包括数据源读取,数据处理,过滤,聚合,最后输出到目标 sink。该 Pipeline 会被系统转化为 Core DAG 在流数据处理引擎中执行。如下图所示:

这些 DAG 里面的计算节点都是一个基于记录(原生流),而非基于批的处理。源端每产生一条新的记录(R1),会由数据库采集节点开始得到马上的处理,并随之交到 DAG 的下一个节点。通过结合 JSDK,用户可以按照 DAG 的规则,构建出非常复杂的数据库处理链路,并交给系统的流数据引擎来完成数据的处理。

流处理引擎的计算框架采用协程机制。与传统线程不同,DFS 并不会为每一个数据处理任务起一个单独的线程(线程资源是有限的),而是用一种类似于 Coroutines 的方式,处理任务的执行启停都是由Java端来完成。底层的线程会持续执行, 并不断地将控制交给框架管理程序来协调不同任务之间的计算工作。由于避免了昂贵的线程上下文切换,协程在很多时候可以显著提高处理速度。

Tapdata 流数据处理引擎支持以下Transformation能力(operator):

- map(fn)
- filter(fn)
- mapWithService( serviceFn)
- mapWithCache
- mapWithReplicatedCache
- hashJoin()
- merge()

在实时流数据统计方面,tapdata 可以支持以下时间窗相关的函数:

- aggregate
- groupingKey
- rollingAggregate
- window
- tumblingWindow
- slidingWindow
- sessionWindow
- mapStateful

NoSQL 支持

常见 ETL 工具大部分为针对于关系型数据库如 Oracle、MySQL 等。tapdata 在提供对关系型数据库的支持的基础之上,更提供完善的 NoSQL 支持,如 MongoDB,Elastic Search 以及Redis 等。目前企业的数据同步需求很大一部分是从关系型数据库实时同步到分布式 NoSQL,用来解决关系数据库的查询性能瓶颈及业务创新瓶颈。

Tapdata 的研发团队在处理 NoSQL 上有天然的优势,这跟这个团队成员大部分来自于 MongoDB 原厂、社区代码贡献者有关。

NoSQL 数据库的特点就是文档结构往往基于JSON,一个文档包含了一对多和多对一关系。在同步的时候需要从多个表按照相应的关系写入到目标 JSON,并且还需要在源表子表更新时同步更新目标JSON的子文档,如下图所示。

Tapdata 支持以下高级 JSON 同步特性:

- 一对一合并同步更新
- 多对一合并同步更新
- 一对多合并同步更新

数据校验、增量校验

数据校验是任何涉及到数据同步或者迁移工具的必备功能。完善的校验能力可以给用户足够的信心来使用数据同步工具。

Tapdata 的校验数据类型包含以下:

- 行数校验
- 哈希校验
- 高级校验(自定义)

Tapdata 校验采用 Merge Sort 方式实现,可以快速完成对大数据表的迁移同步校验工作。测试表明对一个 5000 万行的表,只需要不到 2 分钟左右就可以完成一次全量校验。校验结果分析包括一致率,错误数据比对等。*系统截图*

此外,Tapdata 支持独创的增量校验功能。用户启动对指定的数据同步任务的增量校验功能以后,Tapdata 将对需要校验的表的 CDC 事件单独记录到一个缓存区,并启动一个后台线程,按照用户指定的检验策略,对缓存区的新增 CDC 事件进行解析。解析的时候会根据源表的DDL 获取主键信息,然后依次查询到目标和源表的数据进行比对。

*系统截图

容错机制

Tapdata 提供一下在部署上提供高可用机制以及在数据写入上提供幂等性操作来保证在错误状态下,任务可以持续运行并且数据可以获得最终一致。

每一个数据处理任务在运行的时候会频繁的向管理端汇报健康状况(每 5 秒一次)。如果管理端在一分钟之内没有收到汇报,则认为该处理节点已经离线。此时另一个存活节点会检查到这个没有心跳的任务,并将其接管过来。

每一个数据处理任务会在运行的时候频繁记录当前处理流的位置。当任务重新开启的时候,会自动从该位置从新开始。

为实现上述的容错机制,Tapdata 要求源端和目标端满足以下条件:

源端保留足够长时间的操作日志(通常 1 天以上)
目标端支持幂等性操作或能够参与分步式二阶段事务
附性能参数

Tapdata 是一个企业级的商业产品,数据实时同步和迁移只是其中一部分的功能,想了解产品的更多内容,可以访问官网,提交测试申请可以获得运行的demo。

官网地址: https://www.tapdata.net/

此外, Tapdata 还推出了异构数据实时同步的云服务,登录云服务平台,只需要简单三步操作,即可实现数据实时同步,更令人兴奋的是,该功能是免费使用的。

云服务平台:https://cloud.tapdata.net/

Tapdata 数据库实时同步的技术要点的更多相关文章

  1. asp.net MVC SignalR 与数据库 实时同步显示

    asp.net MVC SignalR 与数据库 实时同步显示 错误:未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持.如果希望使用通知,请为此数据库启用 ...

  2. mysql实时同步到mssql的解决方案

    数据库在应用程序中是必不可少的部分,mysql是开源的,所以很多人它,mssql是微软的,用在windows平台上是非常方便的,所以也有很多人用它.现在问题来了,如何将这两个数据库同步,即数据内容保持 ...

  3. MySQL 到 ES 数据实时同步技术架构

    MySQL 到 ES 数据实时同步技术架构 我们已经讨论了数据去规范化的几种实现方式.MySQL 到 ES 数据同步本质上是数据去规范化多种实现方式中的一种,即通过"数据迁移同步" ...

  4. logstash-input-jdbc实现mysql 与elasticsearch实时同步(ES与关系型数据库同步)

    引言: elasticsearch 的出现使得我们的存储.检索数据更快捷.方便.但很多情况下,我们的需求是:现在的数据存储在mysql.oracle等关系型传统数据库中,如何尽量不改变原有数据库表结构 ...

  5. hexo建立github,gitcafe博客并实时同步的要点

    把hexo博客的源码和生成的页面实时同步到github和gitcafe. 用搜索引擎搜索"github 博客"等关键字会出现大量很好的文章教小白一步步搭建.我这里列出一些关键点,希 ...

  6. 不同SQL数据库之间表数据的实时同步-发布与订阅

    https://blog.csdn.net/rand_muse/article/details/81326879 上述文章中,如果是实时同步,选择  事务发布即可 在快照代理 那里,不需要勾选  运行 ...

  7. 混合事务分析处理“HTAP”的技术要点分析

    HTAP是近些年来比较火的一个概念,本文将聊聊HTAP的前世今生及技术特点. 一.数据应用类别 根据数据的使用特征,可简单做如下划分.在选择技术平台之前,我们需要做好这样的定位. 1.1 OLTP 联 ...

  8. 烂泥:学习mysql数据库主从同步复制原理

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对 ...

  9. Oracle数据库数据同步方案

    一.比较原始的方案:触发器/Job/快照+dblink的方式,可实现同步和定时刷新: 二台不同的数据库服务器,从一台数据库服务器A的一个用户读取另一台数据库服务器B下某个用户的数据,可以通过dblin ...

随机推荐

  1. Java Web实现用户登录功能

    java web 学习记录一下 mvc结构实现mysql 连接 什么是mvc MVC是模型(model).视图(view).控制(controller)这三个单词上的首字母组成.它是一种应用模型,它的 ...

  2. 自学java的困难

    在自学的一些基础阶段,倒是没什么太大的问题,但是在想搞一个项目的时候,就显得手足无措了.因为,很多博主讲的的那些,都行需要一定的条件,比如前端框架,数据库的数据等等. 简单一点的SSM框架整合相对简单 ...

  3. Matlab学习笔记 绘图

    1.二维曲线(1)plot函数①plot函数的基本用法:plot(x,y),其中x和y分别用于存储x坐标和y坐标数据. >>x=[1,2,3]; >>y=[4,5,6]; &g ...

  4. 开源框架 WebFirst 一键生成项目,在线建表

    1.WebFirst框架描述 WebFirst  是果糖大数据团队开发的新一代 高性能 代码生成器&数据库设计工具,由.net core 3.1 + sqlsugar 开发 导入1000个表只 ...

  5. 637. Average of Levels in Binary Tree - LeetCode

    Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这 ...

  6. 好客租房43-react组件基础综合案例-4获取评论信息

    获取评论信息 1使用受控组件方式创建表单 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 // ...

  7. Vue 基础篇---computed 和 watch

    最近在看前端 Vue方面的基础知识,虽然前段时间也做了一些vue方面的小项目,但总觉得对vue掌握的不够 所以对vue基础知识需要注意的地方重新撸一遍,可能比较零碎,看到那块就写哪块吧 1.vue中的 ...

  8. 世界排名前三的Linux桌面发行版

    linux操作系统 1.MX Linux 2.Manjaro 3. Linux Mint 1.MX Linux https://mxlinux.org 中文用户不太友好 2.Manjaro https ...

  9. conda创建/移除虚拟环境

    conda创建python虚拟环境 前言 conda常用的命令: conda list 查看安装了哪些包. conda env list 或 conda info -e 查看当前存在哪些虚拟环境 co ...

  10. fpm工具安装

    概述 最近在对机房的编译环境做整理,过程曲折而痛苦,记录一下. 之前的一个老项目,在打包的时候用到了一个叫做fpm的工具. 编译环境涉及centos6和centos7,在新的编译环境的过程中,如何安装 ...