如何基于日志,同步实现数据的一致性和实时抽取?

一、背景

事情是从公司前段时间的需求说起,大家知道宜信是一家金融科技公司,我们的很多数据与标准互联网企业不同,大致来说就是:

玩数据的人都知道数据是非常有价值的,然后这些数据是保存在各个系统的数据库中,如何让需要数据的使用方得到一致性、实时的数据呢?

过去的通用做法有几种,分别是:

  • DBA开放各个系统的备库,在业务低峰期(比如夜间),使用方各自抽取所需数据。由于抽取时间不同,各个数据使用方数据不一致,数据发生冲突,而且重复抽取,相信不少DBA很头疼这个事情。
  • 公司统一的大数据平台,通过Sqoop 在业务低峰期到各个系统统一抽取数据, 并保存到Hive表中, 然后为其他数据使用方提供数据服务。这种做法解决了一致性问题,但时效性差,基本是T+1的时效。
  • 基于trigger的方式获取增量变更,主要问题是业务方侵入性大,而且trigger也带来性能损失。

这些方案都不算完美。我们在了解和考虑了不同实现方式后,最后借鉴了 linkedin的思想,认为要想同时解决数据一致性和实时性,比较合理的方法应该是来自于log。

(此图来自:https://www.confluent.io/blog/using-logs-to-build-a-solid-data-infrastructure-or-why-dual-writes-are-a-bad-idea/)

把增量的Log作为一切系统的基础。后续的数据使用方,通过订阅kafka来消费log。

比如:

  • 大数据的使用方可以将数据保存到Hive表或者Parquet文件给Hive或Spark查询;
  • 提供搜索服务的使用方可以保存到Elasticsearch或HBase 中;
  • 提供缓存服务的使用方可以将日志缓存到Redis或alluxio中;
  • 数据同步的使用方可以将数据保存到自己的数据库中;
  • 由于kafka的日志是可以重复消费的,并且缓存一段时间,各个使用方可以通过消费kafka的日志来达到既能保持与数据库的一致性,也能保证实时性;

为什么使用log和kafka作为基础,而不使用Sqoop进行抽取呢? 因为:

为什么不使用dual write(双写)呢?,请参考https://www.confluent.io/blog/using-logs-to-build-a-solid-data-infrastructure-or-why-dual-writes-are-a-bad-idea/

这里就不多做解释了。

二、总体架构

于是我们提出了构建一个基于log的公司级的平台的想法。

下面解释一下DWS平台,DWS平台是有3个子项目组成:

  • Dbus(数据总线):负责实时将数据从源端实时抽出,并转换为约定的自带schema的json格式数据(UMS 数据),放入kafka中;
  • Wormhole(数据交换平台):负责从kafka读出数据 将数据写入到目标中;
  • Swifts(实时计算平台):负责从kafka中读出数据,实时计算,并将数据写回kafka中。

图中:

  • Log extractor和dbus共同完成数据抽取和数据转换,抽取包括全量和增量抽取。
  • Wormhole可以将所有日志数据保存到HDFS中; 还可以将数据落地到所有支持jdbc的数据库,落地到HBash,Elasticsearch,Cassandra等;
  • Swifts支持以配置和SQL的方式实现对进行流式计算,包括支持流式join,look up,filter,window aggregation等功能;
  • Dbus web是dbus的配置管理端,rider除了配置管理以外,还包括对Wormhole和Swifts运行时管理,数据质量校验等。

由于时间关系,我今天主要介绍DWS中的Dbus和Wormhole,在需要的时候附带介绍一下Swifts。

三、dbus解决方案

3.1 日志解析

如前面所说,Dbus主要解决的是将日志从源端实时的抽出。 这里我们以MySQL为例子,简单说明如何实现。

我们知道,虽然MySQL InnoDB有自己的log,MyS

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值