美文网首页
ETL系统中的数据一致性探究

ETL系统中的数据一致性探究

作者: 杨康他兄弟 | 来源:发表于2019-11-27 09:32 被阅读0次

    ETL系统,extract,transform,load。
    将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。
    我们考评一个ETL系统是否完善,其中重要的指标之一就是数据的一致性,即数据不丢失,不重复,不被修改等。
    我因为工作原因,接触flume有一段时间,flume核心架构如下:

    image.png
    上图中的矩形框内,即是flume的设计架构,它分为三个组件:sourcechannelsink
    source从数据源端读取数据,读取到的数据会先写进channel,然后sink会从channel消费数据并且将数据写入到其指定的目的地端。这里的source很像一个生产者,channel好似一个消息队列,而sink就是这个消息队列的消费者。在flume中,source - channle , channel -sink 这两个是异步,可以看成是两个线程。flume中还有一个事务的概念,flume中的事务,我所了解到的有:source读事务,sink写事务。flume通过事务的概念来保证数据的一致性。
    个人认为flume是一个很强大的数据ETL开源工具,至少在日志采集这块,是完美的选择,这里可以参考flume的Spooling Directory Source。
    但是,随着我工作中所接触到的业务的发展,flume越来越不适合我们的场景了,这里我会另外写文说明,为什么不合适。因此我们试图寻求新的解决方案,那么我们需要解决的首要问题就是,数据的一致性保证。我们参考了业内很多的常规做法,比如银行的数据处理,他们都是采用了事务的手段,保证数据一致性。但是我认为事务在我们的业务场景内不太适合,虽然它可保证一致性,但是处理起来复杂且低效(可能有更好的事务设计方案,会很高效,但是我目前还不了解),导致成本高(设计,开发成本高)。因此,我想是否还有其他方式保证数据的一致性呢?
    这里,我想到了我们常用的网络协议:TCP/IP协议。这协议中,为了保证数据传输的可靠性,其做了如下校验:
    1: 校验和
    2: 序列号
    3: 确认应答
    4: 超时重传
    5: 连接管理
    6: 流量控制
    7: 拥塞控制
    

    那么,我们能否从TCP/IP的协议设计中,找到我们需要的解决方案呢?

    相关文章

      网友评论

          本文标题:ETL系统中的数据一致性探究

          本文链接:https://www.haomeiwen.com/subject/nliuwctx.html