大数据CDC技术

1、简介

        CDC全称是Change Data Capture,是一种捕获增量数据的技术统称,目前主要应用在捕获数据库数据变更的技术。其中数据库变更包括DDL,DML,DCL等语句触发的变更。在数据备份容灾、数据分发、面向数仓的数据集成等场景中广泛应用。在增量数据识别中,增量捕获能否实现更多依赖于源端系统。

        使用场景:企业信息化建设中,有一个板块是企业应用集成,根据集成深度的不同,可以分为界面集成、数据集成、控制集成、业务流程集成。其中界面集成是指统一入口,使分散的系统看起来产生整体的感觉,使最小化代价实现一体化操作的方法。控制集成和业务流程集成,是应用逻辑层的集成,通过通信的方式,调用其他系统方法或流程,来实现企业内外部的信息资产联动。

        数据集成:其中数据集成是应用系统通过中间件、API调用等方式进行数据交互,当下提到的数据集成,更多的是面向分析场景,通过数据集成实现企业内外部数据的汇聚。

        在面向分析场景中,出于网络压力、对源端系统的压力、以及效率等,重点考虑做增量数据的捕获,这样仅识别并获得最近变化的数据,更方便后续得ETL操作。

        首先我们先对增量数据进行定义:有变化的数据行都是增量数据,如新插入的数据、发生修改的数据、被删除的数据。这些数据在数据集成的时候,都需要被准确识别和还原,这样才能保证OLAP侧和OLTP侧的数据一致性。

2、CDC常见方法分类

        常见的增量数据捕获有基于时间戳、快照、触发器和日志四种。分别如下:

时间戳方法:

        需要源端数据库中有相应的时间戳字段,并且这个字段在业务上代表更新时间,(某些情况下代表数据写入变更等操作时间)。

快照方法:

        一般是数据库自带的机制,如关系型数据库的物化视图技术,也可以自己实现相关逻辑,比如每天或定时某些时刻进行数据的备份等操作,但会比较复杂。

触发器方法:

        是传统关系型数据库自带的机制,触发器会在对表执行相关SQL语句如insert、delete、update的情况下触发,并执行一定的业务逻辑,将变化的数据写到另外一张表中,用于增量数据捕获。通常情况,DBA或数据开发管理人员,会自己编写或维护一套相关的触发器。

日志方法:

        是基于日志消费的模式,源端数据库将库表变更以日志的方式记录到外存中,数据集成通过消费、解析日志进行增量数据捕获。如MYSQL的binlog等。

CDC方法特点
特性时间戳方法快照方法触发器方法日志方法
DBA执行不是不是
实时不是不是
监听删除不是
依赖数据库不是不是
周期内更新监听多次不是不是
区分插入和更新不是

        DBA执行:是否需要DBA支持,在源端系统(一般是数据库本身支持)做一些个性化配置。

        不依赖数据库:技术选型不依赖数据库类型(例如关系数据库和分关系数据库包括大数据hadoop系列,redis,mongodb,memcache等)。(因为部分数据库不支持这些个性化配置,导致部分增量同步方式非普适性)

3、主流实现方式

        基于SQL:

        主要是离线调度查询作业,通过JDBC的方式,发起一次查询请求,服务端根据查询SQL进行解析、编译、执行优化、返回结果集。这个缺点也很明显,首先是增量捕获过程中,对源端数据库有侵入性,需要源端数据库有增量字段,一般是更新时间字段。其次是基于离线调度的方式,无法保证实时性和数据一致性。比如在查的过程中,数据可能已经产生了多次变化。最后,这种查询方式,对源端数据库有一定的IO压力,所以这种方法需要充分考虑源端系统压力,协调时间窗口,或者考虑从备库中进行数据集成。

        基于数据库日志:

        源端数据库通过启用日志(如Mysql的binlog,oracle的binlog等),将数据库变更记录完整、顺序的记录在日志中,我们把日志作为数据源,进行实时消费,并在下游进行数据还原。这样做保证了数据的一致性和实时性。但整体架构相对复杂,设计的时候要充分考虑重跑重刷得情况导致数据重复,需要考虑exactly-once技术

  4、常见的CDC技术实现

        CDC技术实现可以从实时和离线大体两个风向做区分:

        实时:canal、maxwell、Debezium、FlinkCDC、FlinkX等开源技术。

        离线:Sqoop、DataX。

        以上这几种开源数据的比较:

 5、数据库BINLOG

        binlog一般是关系数据库的操作日志,如Mysql,oacle,记录了数据的变更日志,定位一个LogEvent需要通过binlog fimename + binlog position。按照binlog生成方式,mysql支持三种配置:statement-based、row-based、mixed。一般建议使用ROW模式。

        Statement:基于SQL语句的复制(statement-based replication, SBR),记录的是修改数据的SQL、不记录数据变化,减少日志量。但缺点是存在数据不一致的风险,如update t set create_date=now(),在binlog日志恢复时,会导致数据不一致。

        Row:基于行的复制(row-based replication, RBR):仅保存哪条记录被修改,这种模式保证了数据的绝对一致性。缺点是,更新操作时,有多少记录被变化就会记录多少事件。

        Mixed:混合模式复制(mixed-based replication, MBR):一般的复制使用Statement模式保存binlog,对于Statement模式无法复制的操作使用Row模式保存binlog。节省空间的同时,兼顾了一致性,但极个别情况仍有不一致的情况。

6、实时增量数据集成

 Canal

        主要用途是基于Mysql数据库增量日志解析,提供增量数据订阅和消费。目前支持MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x。

MaxWell

        Maxwell同样可以实时读取Mysql的binlog,并生成Json信息,并作为生产者将数据同步给MQ,包括Kafka、Kinesis、RabbitMQ、Redis等。相比canal的优势就是使用简单,更轻量化,并且相比canal,支持初始化操作。

Debezium

        Debezium最早是作为kafka连接器进行设计的,所以和kafka耦合性较强。消费binlog数据后,投递到kafka中,在依赖kafka的connector能力输出到其他存储中。后续的FlinkCDC等技术底层都是基于Debezium进行抽象、改造的。

FlinkCDC

        传统的基于CDC的ETL分析中,通过先采集、然后依赖外部MQ进行数据投递、在下游消费后进行计算,最后在进行数据存储。整体的数据链路比较长,FlinkCDC的核心理念在于简化数据链路,底层集成了Debezium进行binlog的采集、省去了MQ部分、最后通过Flink进行计算。全链路上都基于Flink生态,比较清晰。

FlinkX

        Flinkx已经更名为Chunjun,是一个基于Flink的批流统一的数据同步工具,既可以采集静态数据,也可以采集实时变化数据。功能上可以认为是扩展版的DataX(支持了实时变化数据采集)、从技术和架构上上也迎合了批流一体的概念,目前生态比较完善。

7、离线数据集成

 Sqoop
        目前Sqoop已经从apache顶级项目中被剔除,sqoop支持两个命令,import和export,分别完成关系型数据库到hive(import)、以及hive到关系型数据库(export)、任务触发时,会被解析成MapReduce执行。从当下来看,生态完善性较差,尤其是对数据使用的实时性要求、以及hive本身upsert较弱的局限性等,后续会逐步退出历史舞台。

 Datax
        阿里内被广泛使用的离线数据同步工具/平台,几乎实现了所有常见数据存储的扩展,支持各种异构数据源之间的数据同步。不在赘述
 


        

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据的陷阱 作者:卢昌海 来源:《中学语文(学生版)》2015年第06期 这几年,大数据(big data)的"出镜率"颇高。连带着,"数据科学家"(data scientist)成为了新的高薪一族。人气、财气的提升也带动了士气,有人开始高估大数 据的神通,仿佛只要积累了足够多的数据,请"数据科学家"们坐在电脑前——就像福尔摩 斯坐在太师椅上——敲一通键盘,各种问题就都能迎刃而解了。 大数据真有如此神通吗?回顾一段小历史对我们也许不无启示。 那是在1936年,美国共和党人艾尔弗·兰登(Alfred Landon)与民主党人富兰克林·罗斯福(Franklin D. Roosevelt)竞选总统。当时很有影响力的《文摘》杂志(The Literary Digest)决定搞一次超大规模的民意调查,调查人数高达1,000万,约为当时选民总数 的1/4,最终收到的回复约有240万份,对于民意调查来说可谓是"大数据"——事实上,哪 怕在今天,一些全国性民意调查的调查对象也只有几千。通过对这组"大数据"的分析, 《文摘》杂志预测兰登将以55%比41%的显著优势获胜。但不久后揭晓的真正结果却是罗斯 福以61%比37%的优势大胜。《文摘》杂志的"大数据"遭到了惨败。 当然,那是陈年旧事了。240万份回复作为民意调查是超大规模的,从数据角度 讲,以今天的标准来衡量却实在小得可怜。不过,今天的"大"在几十年后也未必不会如 昔日的"小"一样可怜。那段小历史的真正启示在于:数据已大到了统计误差可以忽略的 地步,结果却错得离谱。这种类型的错误对于大数据是一种警示。 现在让我们回到当代。2008年8月,大数据"成功偶像"之一的谷歌(Google)公 司领衔在《自然》(Nature)杂志上发表论文,推介了一个如今被称为"谷歌流感趋势"( Google Flu Trends)的系统。这一系统能利用互联网上有关流感的搜索的数量和分布来估计各地区 流感类疾病的患者数目。谷歌表示,这一系统给出的估计不仅比美国疾病控制与预防中 心(Centers for Disease Control and Prevention——简称CDC)的数据更快速,而且还有"不依赖于理论"(theory- free)的特点。 但是,这个一度引起轰动的系统经过几年的运行后,却引人注目地演示了大数 据可能带来的陷阱。 2013年2月,《自然》杂志资深记者巴特勒(Declan Butler)发表了一篇题为"当谷歌弄错了流感"(When Google got flu wrong)的文章,指出"谷歌流感趋势"对2012年底美国流感类疾病患者数目的估计比美国 疾病控制与预防中心给出的数据高了约一倍。不仅如此,"谷歌流感趋势"在2008- 2009年间对瑞士、德国、比利时等国的流感类疾病患者数目的估计也都失过准。 大数据在这些例子中为什么会失败呢?人们很快找到了原因。比如《文摘》杂志 对1936年美国总统竞选预测的失败,是因为该杂志的调查对象是从汽车注册资料及电话 簿中选取的,而汽车及电话在当时的美国尚未普及,使得由此选出的调查对象缺乏代表 性。而谷歌对2012年底美国流感类疾病患者数目的估计失败,则是因为媒体对那段时间 的美国流感类疾病作了渲染,使得很多非患者也进行了有关流感的搜索,从而干扰了"谷 歌流感趋势"的估计。在统计学中,这被称为系统误差(systematic error),只要存在这种误差,数据量再大也无济于事。 当然,原因一旦找到,对结果进行修正也就不无可能了。比如在有关流感的搜 索中,来自患者的搜索往往随疫情的爆发而迅速增加,随疫情的缓慢结束而缓慢降低, 呈现出前后的不对称,而媒体渲染引来的非患者的搜索则前后比较对称。利用这一区别 ,原则上可对结果进行校正。 但另一方面,原因之所以很快找到,是因为失败已成事实,从而有了明确的分 析对象,在千变万化的大数据分析中要想每次都"先发制人"地避免失败却是极其困难的 。比如大数据分析对数据间的相关性情有独钟,其所津津乐道的"不依赖于理论"的特点 却在很大程度上排斥了对相关性的价值进行甄别——就如知名技术类刊物《连线》(Wired) 杂志的主编安德森(Chris Anderson)曾经宣称的:"只要有足够多数据,数字自己就能说话"(with enough data, the numbers speak for themselves)。数字也许是能说话,但说出的未必都是有价值的话。事实上,未经甄别 的相关性可谓处处是陷阱。比如2006- 2011年间,美国的犯罪率和微软IE浏览器的市场占有率就明显相关(同步下降),但却 是毫无价值的相关性——这是纽约大学(New York University)计算机教授戴维斯(Ernest Davis)举出的例子。
Flink CDC(Change Data Capture) ETL(Extract Transform Load) 是一种通过 Apache Flink 框架实现的数据流处理解决方案。 CDC 是一种数据捕获技术,用于实时捕获数据库中的变化,将变化的数据作为事件流进行处理。Flink CDC 利用数据库的日志功能,可以实时获取并解析数据库的变化日志,将变化的数据转化为流式的数据,然后交给 Flink 进行处理。这样,我们就可以实时地监控和处理数据库中的数据变化。 Flink CDC ETL 是基于 CDC 技术的数据处理过程。ETL 是指数据的抽取(Extract)、转换(Transform)和加载(Load)。在 Flink CDC ETL 中,首先通过 CDC 技术数据库中实时捕获变化的数据,然后通过 Flink 的转换操作,对数据进行处理和转换,最后将经过处理的数据加载到目标位置,如数据库、数据仓库或数据湖中。 通过 Flink CDC ETL,我们可以实现实时的数据分析和处理。例如,我们可以实时监控数据库中的用户行为数据,对用户的行为进行实时计算和分析,为企业决策提供实时的数据支持。另外,Flink CDC ETL 还可以帮助我们构建实时数据管道,将不同源头的数据进行实时抽取、转换和加载,从而实现数据集成和数据治理。这对于企业来说,有助于提高数据的价值和利用率。 总之,Flink CDC ETL 是一种基于 Flink 框架实现的数据流处理解决方案,通过利用 CDC 技术实时捕获数据库变化日志,将变化的数据转化为流式数据,并通过 Flink 的转换操作进行处理和加载,实现实时的数据分析和处理。这种技术对于企业的数据管理和决策分析具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值