- 基于时间戳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 ”