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/