实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)
數據庫實時增量同步工具-CDC(Change Data Capture)
Canal
阿里巴巴B2B公司,因為業務的特性,賣家主要集中在國內,買家主要集中在國外,所以衍生出了杭州和美國異地機 房的需求,從2010年開始,阿里系公司開始逐步的嘗試基于數據庫的日志解析,獲取增量變更進行同步,由此衍生 出了增量訂閱&消費的業務。
Canal是用java開發的基于數據庫增量日志解析,提供增量數據訂閱&消費的中間件。目前,Canal主要支持了MySQL 的binlog解析,解析完成后才利用Canal client 用來處理獲得的相關數據。(數據庫同步需要阿里的otter中間件,基 于Canal)。
使用場景
1.原始場景: 阿里otter中間件的一部分 otter是阿里用于進行異地數據庫之間的同步框架,Canal是其中一部分。
Databus
LinkedIn開源
1)Databus 分布式數據同步系統 2)Cubert 高性能計算引擎 3)ParSeq Java一部處理框架 4)kafka 流處理平臺Databus&canal對比
截止2018-10-09
Databus和canal都能夠提供實時從數據庫獲取變更,并提供給下游的實時消費流的功能。
本文針對兩個系統實現和應用上的不同點,做了一個簡單的對比:
| 支持的數據庫 | mysql, oracle | mysql(據說內部版本支持oracle) | Databus目前支持的數據源更多 | |
| 業務開發 | 業務只需要實現事件處理接口 | 事件處理外,需要處理ack/rollback,反序列化異常等 | Databus開發接口用戶友好度更高 | |
| 服務模型 | relay | relay可以同時服務多個client | 一個server instance只能服務一個client(受限于server端保存拉取位點) | Databus服務模式更靈活 |
| client | client可以拉取多個relay的變更,訪問的relay可以指定拉取某些表某些分片的變更 | client只能從一個server拉取變更,而且只能是拉取全量的變更 | ||
| 可擴展性 | client可以線性擴展,處理能力也能線性擴展(Databus可識別pk,自動做數據分片) | client無法擴展 | Databus擴展性更好 | |
| 可用性 | client ha | client支持cluster模式,每個client處理一部分數據,某個client掛掉,其他client自動接管對應分片數據 | 主備client模式,主client消費,如果主client掛掉,備client可自動接管 | Databus實時熱備方案更成熟 |
| relay/server ha | 多個relay可連接到同一個數據庫,client可以配置多個relay,relay故障啟動切換 | 主備relay模式,relay通過zk進行failover | canal主備模式對數據庫影響更小 | |
| 故障對上游數據庫的影響 | client故障,bootstrap會繼續拉取變更,client恢復后直接從bootstrap拉取歷史變更 | client故障會阻塞server拉取變更,client恢復會導致server瞬時從數據庫拉取大量變更 | Databus本身的故障對數據庫影響幾乎為0 | |
| 系統狀態監控 | 程序通過http接口將運行狀態暴露給外部 | 暫無 | Databus程序可監控性更好 | |
| 開發語言 | java,核心代碼16w,測試代碼6w | java,4.2w核心代碼,6k測試代碼 | Databus項目更成熟,當然學習成本也更大 |
Debezium
截止2019.11.17
RedHat開源的Debezium是一個將多種數據源實時變更數據捕獲,形成數據流輸出的開源工具。
它是一種CDC(Change Data Capture)工具,工作原理類似大家所熟知的Canal, DataBus, Maxwell等,是通過抽取數據庫日志來獲取變更的。
官方介紹為:
Debezium is an open source distributed platform for change data capture. Start it up, point it at your databases, and your apps can start responding to all of the inserts, updates, and deletes that other apps commit to your databases. Debezium is durable and fast, so your apps can respond quickly and never miss an event, even when things go wrong
為什么選擇Debezium
網上關于實時采集Oracle數據的資料并不多,通常的做法有以下幾種:
對比4種CDC工具,其中GoldenGate簡稱ogg,Debezium簡稱dbz,DataPipeline簡稱dp。對比如下:
支持的數據源、目標類型
| Mysql | 源/目標 | 源 | 源/目標 | / |
| Oracle | 源/目標 | 源(不成熟) | 源/目標 | / |
| PostgreSQL | 目標 | 源 | 源/目標 | 源/目標 |
| Kafka | 目標 | 目標 | 目標 | / |
| SQLServer | 目標 | 源 | 目標 | / |
| MongoDB | 目標 | 源 | / | |
| Hive/HBase/Hdfs | 目標 | / | 目標 | / |
主要功能對比
| license | 商業收費,oracle原廠支持 | 開源免費,非常活躍,迭代速度極快 | 商業收費,原廠支持 | 開源免費,迭代速度較快 |
| DDL同步 | MySQL,Oracle | MySQL,SQLServer | 有限支持 | PostgreSQL |
| 雙向同步 | Y | N | 有限支持 | N |
| 主鍵/唯一約束沖突處理 | Y | 需消費端自行實現 | Y | Y |
| 要求與源庫裝在同一臺機器,目標庫版本不低于源庫 | 否 | 否 | 否 | 必須 |
| 初始化批量同步 | initial load | snapshot | 支持 | copy |
| web界面 | N | N | Y | N |
| 數據冪等性 | Y | 需消費端自行實現 | Y | Y |
| 監控策略 | 命令行/monitor | http接口 | web界面 | 命令行 |
| 調優策略 | 修改配置 | 較復雜 | 修改配置 | 修改配置 |
| 結構遷移 | N | N | Y | N |
通過對比綜合考慮,我們最終決定
PostgreSQL->PostgreSQL的同步,目標庫版本不低于源庫版本,使用開源工具Pglogical
PostgreSQL->非PostgreSQL的同步,或高版本PostgreSQL->低版本PostgreSQL,使用Debezium + Kafka + 自行開發消費端
Maxwell
https://github.com/zendesk/maxwell
引用
Flink+Clickhouse實時數倉在廣投集團的最佳實踐
https://www.jianshu.com/p/6aaa2f61f56b
深度對比delta、iceberg和hudi三大開源數據湖方案
https://mp.weixin.qq.com/s/m8-iFg-ekykWGrG3gXlLew
增量數據同步工具Debezium介紹
https://www.jianshu.com/p/61e604299b5e
總結
以上是生活随笔為你收集整理的实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql一个字段为空时使用另一个字段排
- 下一篇: TinyG 入门06