先上一張圖,後面再慢慢介紹:
CDC概述
CDC 的全稱是 Change Data Capture ,在廣義的概念上,隻要能捕獲資料變更的技術,我們都可以稱為 CDC 。我們目前通常描述的CDC 技術主要面向資料庫的變更,是一種用于捕獲資料庫中資料變更的技術。
CDC主要分以下兩類
- 基于查詢的 CDC:優點是實作簡單,是通過批處理實作的,需要依賴離線排程,不能保證資料強一緻性和實時性;
- 基于日志的 CDC:實作比較複雜,但是可以實時消費日志,流式處理,可保證資料一緻性和實時性;
方案對比
目前市面上的CDC技術比較多,我們選取了幾種主要的開源CDC方案做了對比,總體如下圖:
如上圖所示,從CDC機制、增量同步、斷電續傳、全量同步、全量+增量、架構、資料計算、生态這八個方面做了對比。可以看出其中的佼佼者主要是Flink CDC和Oracle OGG以及Debezium;
由于基于查詢的CDC方案缺陷明顯,這裡不作讨論,下面我們對基于日志的CDC方案的優劣來做詳細的介紹。
各方案優缺點
Flink CDC:Flink CDC是最近幾年的新貴,Flink CDC 底層封裝了 Debezium,功能比較全面,目前已經疊代到了2.4版本,社群活躍度在幾個方案中是最高的;
- 優點:全、增量一體的分布式資料內建架構;同步時無需加鎖;吞吐量大,适合海量資料實時同步;操作簡單,SQL即可完成;具有強大的 transformation 能力,通過 Flink SQL 即可完成ETL 中的資料轉換;有豐富的 Connector,除關系型資料庫外,HBase、ClickHouse、TiDB等也支援,而且支援自定義 connector;
- 缺點:依賴Flink叢集,資料量較大時對伺服器要求較高;
Oracle OGG:Oracle OGG曆史比較悠久,最初是設計用來從Oracle遷移資料到其它資料庫,或者從其它平台遷移資料到Oracle,随着發展,目前已支援Mysql、Hadoop、Hive、Kafka登資料源;
- 優點:支援增量和全量同步,支援分布式,高性能,支援資料過濾和轉化,是目前主流的實時同步方案之一;
- 缺點:支援的資料庫比較少,像一些MongoDB、TiDB等不支援;
Debezium:Debezium最初設計成一個Kafka Connect 的Source Plugin,目前開發者雖緻力于将其與Kafka Connect解耦,但目前的代碼實作還未變動。下圖引自Debeizum官方文檔,可以看到一個Debezium在一個完整CDC系統中的位置。
- 優點:支援全量+增量同步;
- 缺點:全量同步時會加鎖,而且加鎖時間不确定,會嚴重影響業務;最重要的是跟Kafka等消息中間件強耦合,下遊資料要經過Kafka;
Canal:主要用途是基于 MySQL 資料庫增量日志解析,提供增量資料訂閱和消費。
- 優點:用于單一的MySQL環境做資料同步還不錯;
- 缺點:缺點較為明顯,隻支援MySQL的CDC,隻支援增量同步,全量需要用DataX或者Sqoop,全量和增量同步割裂;不支援分布式;