- 基於時間戳CDC
- 基於觸發器的CDC
- 基於快照的CDC
- 基於日志的CDC
基本用時間戳CDC,日志CDC!
分為侵入式和非侵入式。侵入式:對源數據庫有sql操作,有性能影響(前三種都是)
1.基於時間戳CDC
兩列時間,分別記錄create_time和modify_time,可以識別變動數據
缺點:
1.無法識別多次更新
2.無法識別刪除
3.不具有實時能力
2.基於觸發器的CDC【少】
原始數據表+insert觸發器,可以在另外一張表中記錄對原表的增刪改查操作
事件機制
影響性能:因為數據庫中直接多了一張表!所以很少使用此方法。
3.基於快照的CDC
比較某個表現在的情況 vs 某個時間點某個表的快照 => 差異檢測出更新情況
缺點:需要大量存儲空間保存快照
4.基於日志CDC
binlog用來記錄對mysql的操作日志,如何開啟binlog => https://www.jb51.net/article/157187.htm
場景:日志抽取 => kafka實時/hbase/redis但不會hive(慢) => spark計算 => 展示
(在hive中,transactional=‘true’表明如此我可以進行事務操作如更新,一般情況不更新)
場景應用:
- flume收集日志工具 + binlog日志= 整合,實時監控,使用flume-ng-sql-source
- 專門用來同步binlog的工具:canal,可以實現“ MySQL Binlog通過Canal同步HDFS ”