滴滴基于Binlog的采集架构与实践

桔妹导读:大数据是这个时代赋予我们的强大引擎,在数字化大潮中 ,借助数据驱动的方法推动业务乘风破浪,几乎是每家公司的核心战略。数据驱动的落脚点是数据,能否将组织或业务运行过程中的信息,进行有效收集并组织成信息流,是数据驱动的基石所在。本文分享了滴滴数据体系建设过程中,MySQL这一类数据源的采集架构和应用实践。 

1. 

背景

关系模型构建起整个数据分析的基石,关系型数据库作为具体实现、采集MySQL数据接入Hive是很多企业进行数据分析的前提。如何及时、准确的把MySQL数据同步到Hive呢?

一般解决方案是使用类似Sqoop的工具,直连MySQL去Select数据存储到HDFS,然后把HDFS数据Load到Hive中。这种方法简单易操作,但随着业务规模扩大,不足之处也逐步暴露出来:

  • 直连MySQL查询,对于数据库压力较大(如订单表、支付表等),可能直接影响在线业务

  • 数据整体就位时间(尤其大表)不满足下游生产需求

  • 扩展性较差,对于分表、字段增减、变更等的支持较弱

  • 拉取的数据是该时刻的镜像,无法获取中间变化情况

为解决上述问题,我们引入Binlog实时采集 + 离线还原的解决方案,本文将从这两个方面介绍整个数据的接入流程。

 

2. 

整体数据流程

整体数据流程如上图所示,数据收集部分使用定制化Canal组件(基于阿里开源项目)收集binlog日志并做格式转换,然后通过消息队列传输并落地到HDFS,最后对HDFS上的binlog进行清洗还原入库。

如果是增量接入,上述操作就完成了一次入库流程。针对全量接入或者回溯历史数据,因为缺少历史binlog日志(发起采集时才开始收集)无法还原历史数据,此时需要借助离线一次性拉取,流程如下:

  • 按照上述流程采集binlog日志增量入HDFS

  • 使用离线一次性拉取一份历史全量数据,按字段还原到Hive作为基点(即第一个接入周期的数据)

  • 使用前一个接入周期的全量数据和本周期的增量binlog做merge形成该周期内的数据。

相比一般解决方案,其优点比较明显,主要表现在:

  • 基于Binlog日志的数据还原,与在线业务解耦

  • 采集通过分布式队列实时传递,还原操作在集群上实现,及时性及可扩展性强

  • Binlog日志包括了增、删、改等明细动作,支持定制化的ETL

3. 

Binlog

MySQL Binlog是二进制格式的日志文件,用来记录数据库的数据更新或者潜在更新(比如DELETE语句执行删除而实际并没有符合条件的数据),主要用于数据库的主从复制以及增量恢复。

一共有两种类型二进制记录方式:

  • Statement模式:每一条会修改数据的sql都会被记录在binlog中,如inserts, updates, deletes。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值