Canal+Camus快速采集MySQL Binlog到数据仓库
点击上方 蓝色字体 ,选择“ 设为星标 ” 回复”资源“获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据 真好玩 点击右侧关注,大数据真好玩! 数据仓库的同步方法 我们的数据仓库长久以来一直使用天级别的离线同步方法:采用Sqoop或DataX按天定时获取各个MySQL表的全量或增量数据,然后载入到Hive里对应的各个表中。这种方法门槛低,容易操作,在数仓建设阶段能够快速启动。但是随着时间的推移,它暴露出了一些缺点: 从MySQL获取数据只能靠select,如果一次select数据量过大,会造成慢查询,甚至影响线上业务; 随着业务量的增长和新业务的加入,数据量会相应增加,离线同步一次的耗时会越来越长; 增量同步方式无法检测到MySQL中被delete掉的记录,如果没有时间戳字段的话,也较难检测到被update的记录。 所以,我们最近致力于按照变动数据获取(Change Data Capture,CDC)的方式改造我们的数仓,分三步走: 首先订阅MySQL库的Binlog,将其存储到临时表中; 然后对需要入库的表一次性制作快照,并将存量数据导入Hive; 最后基于存量数据和Binlog记录的变动进行合并,还原出与业务库相同的数据。 本文要说的就是第一步的实现方案。我们采用阿里的开源组件Canal来接入MySQL Binlog,并投递到Kafka