Tapdata 是由深圳鈦鉑數據有限公司研發的一款實時數據處理及服務的平臺產品,企業可使用 Tapdata 快速構建數據中臺和實時數倉, Tapdata 提供了一站式的解決方案,包括實時數據採集、數據融合以及數據發佈等功能和能力。數據庫
Tapdata 專一於實時數據的處理技術,在數據庫遷移和同步方面,Tapdata 的表現很是優秀,實時、多元、異構,尤爲在關係數據庫到非關係數據庫之間的雙向同步方面,不管是從操做上,仍是效率上,都體現了業界領先的水平。緩存
本文重點闡述 Tapdata 在數據庫實時同步方面的技術要點。session
基於數據庫日誌的實時遷移或同步
在數據庫同步場景下,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 還推出了異構數據實時同步的雲服務,登陸雲服務平臺,只須要簡單三步操做,便可實現數據實時同步,更使人興奮的是,該功能是無償使用的。