canal

美团DB数据同步到数据仓库的架构与实践

痴心易碎 提交于 2019-11-28 20:52:29
背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据。在互联网企业中,常见的ODS数据有业务日志数据(Log)和业务DB数据(DB)两类。对于业务DB数据来说,从MySQL等关系型数据库的业务数据进行采集,然后导入到Hive中,是进行数据仓库生产的重要环节。 如何准确、高效地把MySQL数据同步到Hive中?一般常用的解决方案是批量取数并Load:直连MySQL去Select表中的数据,然后存到本地文件作为中间存储,最后把文件Load到Hive表中。这种方案的优点是实现简单,但是随着业务的发展,缺点也逐渐暴露出来: 性能瓶颈:随着业务规模的增长,Select From MySQL -> Save to Localfile -> Load to Hive这种数据流花费的时间越来越长,无法满足下游数仓生产的时间要求。 直接从MySQL中Select大量数据,对MySQL的影响非常大,容易造成慢查询,影响业务线上的正常服务。 由于Hive本身的语法不支持更新、删除等SQL原语,对于MySQL中发生Update/Delete的数据无法很好地进行支持。 为了彻底解决这些问题,我们逐步转向CDC (Change Data Capture) + Merge的技术方案,即实时Binlog采集 +

Canal入门(四)

浪子不回头ぞ 提交于 2019-11-28 07:18:19
Canal入门(四) 实际上,在实际应用开发中,单体架构的很少存在,我们要为其做一个HA高可用的架构,保障其中一台宕机后,不影响正常使用。 Canal的HA模式配置 1、机器准备 a. 运行canal的机器: 10.20.144.22 , 10.20.144.51. b. zookeeper地址为10.20.144.51:2181 c. mysql地址:10.20.144.15:3306 2、 按照部署和配置,在单台机器上各自完成配置,演示时instance name为example 修改canal.properties,加上zookeeper配置 canal.zkServers=10.20.144.51:2181 canal.instance.global.spring.xml = classpath:spring/default-instance.xml 创建example目录,并修改instance.properties canal.instance.mysql.slaveId = 1234 ##另外一台机器改成1235,保证slaveId不重复即可 canal.instance.master.address = 10.20.144.15:3306 注意: 两台机器上的instance目录的名字需要保证完全一致,HA模式是依赖于instance name进行管理

基于Binlog和canal的异库同步

浪子不回头ぞ 提交于 2019-11-26 02:06:01
下载canal服务端的安装包:https://github.com/alibaba/canal 被监听端 1、开启binlog服务,修改vi /etc/my.cnf log-bin:binlog日志存放位置 server-id:服务id 2、上传canal服务端安装包,并解压。配置过程如下: 修改vi conf/canal.properties ################################################# ######### common argument ############# ################################################# canal.id= 1 canal.ip= canal.port= 11111 canal.zkServers= # flush data to zk canal.zookeeper.flush.period = 1000 # flush meta cursor/parse position to file canal.file.data.dir = ${canal.conf.dir} canal.file.flush.period = 1000 ## memory store RingBuffer size, should be Math.pow(2,n)