您现在的位置是:热点 >>正文
数仓 | 几种常见的数据同步方式
热点548人已围观
简介...
写在前面
数据仓库的特性之一是集成,即首先把未经过加工处理的、不同来源的、不同形式的数据同步到ODS层,一般情况下,这些ODS层数据包括日志数据和业务DB数据。对于业务DB数据而言(比如存储在MySQL中),将数据采集并导入到数仓中(通常是Hive或者MaxCompute)是非常重要的一个环节。
那么,该如何将业务DB数据高效准确地同步到数仓中呢?一般企业会使用两种方案:直连同步与实时增量同步(数据库日志解析)。其中直连同步的基本思路是直连数据库进行SELECT,然后将查询的数据存储到本地文件作为中间存储,最后把文件Load到数仓中。这种方式非常的简单方便,但是随着业务的发展,会遇到一些瓶颈,具体见下文分析。
为了解决这些问题,一般会使用实时增量的方式进行数据同步,其基本原理是CDC (Change Data Capture) + Merge,即实时Binlog采集 + 离线处理Binlog还原业务数据这样一套解决方案。
本文主要包括以下内容,希望对你有所帮助
常见数据同步方式 流式数据集成 数据同步的方式 直连同步
直连同步是指通过定义数仓好的规范接口API和基于动态链接库的方式直接连接业务库,比如ODBC/JDBC等规定了统一的标准接口,不同的数据库基于这套标准提供规范的驱动,从而支持完全相同的函数调用和SQL实现。比如经常使用的Sqoop就是采取这种方式进行批量数据同步的。
直连同步的方式配置十分简单,很容易上手操作,比较适合操作型业务系统的数据同步,但是会存在以下问题:
数据同步时间:随着业务规模的增长,数据同步花费的时间会越来越长,无法满足下游数仓生产的时间要求。 性能瓶颈:直连数据库查询数据,对数据库影响非常大,容易造成慢查询,如果业务库没有采取主备策略,则会影响业务线上的正常服务,如果采取了主备策略,虽然可以避免对业务系统的性能影响,但当数据量较大时,性能依然会很差。
日志解析
所谓日志解析,即解析数据库的变更日志,比如MySQL的Binlog日志,Oracle的归档日志文件。通过读取这些日志信息,收集变化的数据并将其解析到目标存储中即可完成数据的实时同步。这种读操作是在操作系统层面完成的,不需要通过数据库,因此不会给源数据库带来性能上的瓶颈。
数 |据库日志解析的同步方式可以实现实时与准实时的同步,延迟可以控制在毫秒级别的,其最大的优势就是性能好、效率高,不会对源数据库造成影响,目前,从业务系统到数据仓库中的实时增量同步,广泛采取这种方式。当然,这种方式也会存在一些问题,比如批量补数时造成大量数据更新,日志解析会处理较慢,造成数据延迟。除此之外,这种方式比较复杂,投入也较大,因为需要一个实时的抽取系统去抽取并解析日志,下文会对此进行详细解释。
如上图所示架构,在直连同步基础之上增加了流式同步的链路,经过流式计算引擎把相应的 Binlog 采集到 Kafka,同时会经过一个 Kafka 2Hive 的程序把它导入到原始数据,再经过一层 Merge,产出下游需要的 ODS 数据。
上述的数据集成方式优势是非常明显的,把数据传输的时间放到了 T+0 这一天去做,在第二天的时候只需要去做一次 merge 就可以了。非常节省时间和计算资源。
流式数据集成实现 实现思路
首先,采用Flink负责把Kafka上的Binlog数据拉取到HDFS上,生成增量表。
然后,对每张ODS表,首先需要一次性制作快照( 几Snapshot),把MySQL里的存量数据读取到Hive上,这一过程底层采用直连MySQL去Select数据的方式,可以使用Sqoop进行一次性全量导入,生成一张全量表。
最后,对每张ODS表,每天基于存量数据和当天增量产生的Binlog做Merge,从而还原出业务数据。
Binlog是流式产生的,通过对Binlog的实时采集,把部分数据处理需求由每天一次的批处理分摊到实时流上。无论从性能上还是对MySQL的访问压力上,都会有明显地改善。Binlog本身记录了数据变更的类型(Insert/Update/Delete),通过一些语义方面的处理,完全能够做到精准的数据还原。
关于Binlog解析部分,可以使用canal工具,采集到Kafka之后,可以使用Flink解析kafka数据并写入到HDFS上,解析kafka的数据可以使用Flink的DataStreamAPI,也可以使用FlinkSQL的canal-json数据源格式进行解析,使用FlinkSQL相对来说是比较简单的。下面是canal-json格式的kafka种常数据源。
CREATE TABLE region ( id BIGINT, region_name STRING ) WITH ( 'connector' = 'kafka', 'topic' = 'mydw.base_region', 'properties.bootstrap.servers' = 'kms-3:9092', 'properties.group.id' = 'testGroup', 'format' = 'canal-json' , 'scan.startup.mode' = 'earlies见的t-offset' );
数据解析完成之后,下面的就是合并还原完整数据的过程,关于合并还原数据,一种比较常见的方式就是全外连接(FULL OUTER JOIN)。具体如下:
生成增量表与全量表的Merge任务,当天的增量数据与昨天的全量数据进行全外连接,该Merge任务的基本逻辑是:
INSERT OVERWRITE TABLE user_order PARTITION(ds='20211012') SELECT CASE WHEN n.id IS NULL THEN o.id ELSE n.id 数据 END ,CASE WHEN n.id IS NULL THEN o.create_time ELSE n.create_time END  同步;,CASE WHEN n.id IS NULL THEN o.modified_time ELSE n.modified_time END ,CASE WHEN n.id IS NULL THEN o.user_id &nb方式sp; ELSE n.user_id END ,CASE WHEN n.id IS NULL THEN o.sku_code &n数仓bsp; ELSE n.sku_code END ,CASE WHEN n.id IS NULL THEN o.pay_fee ELSE n.pay_fee END FROM & |nbsp; ( SELECT * FROM user_order_delta WHERE ds = '20211012' AND   几; id IS NOT NULL AND user_id IS NOT NULL ) n FULL OUTER JOIN (-- 全外连接进行数据merge SELECT * &n种常bsp; FROM user_order WHERE ds = '20211011' AND 见的; id IS NOT NULL AND user_id IS NOT NULL ) o 数据;ON o.id = n.id AND o.user_id = n.user_id ;
经过上述步骤,即可将数据还原完整。
总结
本文首先介绍了数据仓库构建ODS层常见的数据同步方式,并对每种方式进行了解释,给出了相对应的示意图。接着给出了CDC+Merge的数据同步方案。值得注意的是,Flink1.11引入了CDC的connector,比如MySQL CDC和Postgres CDC,同时对Kafka的Connector支持canal-json和debezium-json以及changelog-json的format,通过这种方式可以很方便地捕获变化的数据,大大简化了数据处理的流程和数据同步的复杂度。
Tags:
相关文章
贝索斯第三季度将卸任亚马逊CEO 转任执行董事长
热点北京时间2月3日消息,亚马逊周二盘后公布了该公司去年四季度财报。同时,亚马逊宣布,该公司创始人及CEO杰夫·贝索斯(Jeff Bezos)将于第三季度改任执行董事长,届时安迪·贾西(Andy Jass...
【热点】
阅读更多蚂蚁数科提出隐私保护AI新算法,可将推理效率提升超过100倍
热点近日,全球安全顶级会议ACM CCS以及顶刊IEEE TDSC发布获选论文名单,蚂蚁数科的两项隐私计算创新技术成果入选,标志着蚂蚁数科在隐私保护人工智能(Privacy-Preserving AI)技...
【热点】
阅读更多巴西狂欢节几月几日
热点前言:巴西著名的狂欢节是在每年的几月举行??巴西狂欢节在复活节前47天,而复活节是春分月圆后的第一个星期日,故巴西狂欢节日期不确定。巴西狂欢节被称为世界上最大的狂欢节,有“地球上最伟大的表演”之称。在...
【热点】
阅读更多
热门文章
最新文章
友情链接
- 标签: 康师傅
- https://www.yidian51.com/taobao/谷歌快排操作流程【tg:seogoogle987】,XDL
- https://www.posten-portal.de/search?query=谷歌快排操作流程【tg:seogoogle987】,uOQ
- https://www.udc.co.uk/index.php?route=product/search&sort=p.price&order=DESC&tag=谷歌快排操作流程【tg:seogoogle987】,WjG
- https://www.rotherham.gov.uk/site-search/results/?q=谷歌快排操作流程【tg:seogoogle987】,PKj
- https://www.smarty.net/search?q=谷歌快排操作流程【tg:seogoogle987】,h9V
- https://www.remit.co.jp/vi/?s=谷歌快排操作流程【tg:seogoogle987】,sqt
- https://www.lechzuers.com/de/search?cat=163&q=谷歌快排操作流程【tg:seogoogle987】,H2I
- https://www.pearlstonecenter.org/search/谷歌快排操作流程【tg:seogoogle987】,BGI
- https://www.tarleton.edu/news/search/谷歌快排操作流程【tg:seogoogle987】,ObL
- https://www.repetto.jp/item/search?action=QUERY&q=谷歌快排操作流程【tg:seogoogle987】,HPE
- https://www.lyrics.com/lyrics/kkk3谷歌快排操作流程【tg:seogoogle987】,BRF
- https://www.mingwai.edu.hk/?langzh-hant&s=谷歌快排操作流程【tg:seogoogle987】,TOd
- https://www.kaliastyle.com/catalogsearch/result/?q=GOOGLE谷歌快排操作流程【tg:seogoogle987】,JuA
- https://www.nonsolocap.it/cap?action=SEARCH&k=谷歌快排操作流程【tg:seogoogle987】,pWL
- https://www.pearson.com/en-us/search.html?aq=谷歌快排操作流程【tg:seogoogle987】,5LK
- https://www.lindseymedicalsupply.com/search/谷歌快排操作流程【tg:seogoogle987】,4uM
- https://www.zalora.sg/catalog/?cat=112&q=谷歌快排操作流程【tg:seogoogle987】,6F8
- https://www.nbm.org/?action=QUERY&s=谷歌快排操作流程【tg:seogoogle987】,dyW
- https://www.teacherspayteachers.com/Browse/Search:谷歌快排操作流程【tg:seogoogle987】,r6J
- https://www.scq.ubc.ca/?page=2&s=谷歌快排操作流程【tg:seogoogle987】,DAT
- https://www.vfw.org/search-results?q=谷歌快排操作流程【tg:seogoogle987】,3JG
- https://www.londontheatredirect.com/search/谷歌快排操作流程【tg:seogoogle987】,N8p
- https://www.selfsufficientish.com/main/?s=谷歌快排操作流程【tg:seogoogle987】,yhC
- https://www.nextavenue.org/?action=QUERY&s=谷歌快排操作流程【tg:seogoogle987】,Z40
- https://www.roberthalf.com/us/en/jobs/all/谷歌快排操作流程【tg:seogoogle987】2YU
- https://www.riohondo.edu/?action=QUERY&s=谷歌快排操作流程【tg:seogoogle987】,ytS
- https://www.solerpalau.com/en-en/catalogsearch/result/?q=谷歌快排操作流程【tg:seogoogle987】,TAe
- https://www.wheels24.gr/?action=CHECK&s=谷歌快排操作流程【tg:seogoogle987】,vKY
- https://www.randjleather.co.uk/index.php?route=product/search&tag=谷歌快排操作流程【tg:seogoogle987】,aXh
- https://www.sic-info.org/en/?s=谷歌快排操作流程【tg:seogoogle987】,Uf2
- https://www.rollingstone.it/?ID=DVMeu3AlmzZE1cuJ2FmgmO5TSCQRb3yh&s=谷歌快排操作流程【tg:seogoogle987】,cRY
- https://www.kissthekangaroo.com.au/index.php?route=product/search&tag=谷歌快排操作流程【tg:seogoogle987】,TZ4
- https://www.youtube.com/results?search_query=谷歌快排操作流程【tg:seogoogle987】,ZUX
- https://www.pickett.co.uk/collections/vendors?q=谷歌快排操作流程【tg:seogoogle987】,XnU
- https://www.shacknews.com/editorial-search?q=谷歌快排操作流程【tg:seogoogle987】,Vrq
- https://www.qwant.com/?q=谷歌快排操作流程【tg:seogoogle987】,z7f
- https://www.simcoemuskokahealth.org/SearchResults.aspx?SearchQuery=谷歌快排操作流程【tg:seogoogle987】,sLo
- https://www.teamlab.art/pt/?submit=谷歌快排操作流程【tg:seogoogle987】,cNt
- https://www.remit.co.jp/vi/?s=谷歌快排操作流程【tg:seogoogle987】UZF
- https://www.realsporting.com/buscador?buscar=谷歌快排操作流程【tg:seogoogle987】,JTf
- https://www.le-trend.com/en/search/=谷歌快排操作流程【tg:seogoogle987】,qMc
- https://www.miamiopenmri.com/?action=CHECK&s=谷歌快排操作流程【tg:seogoogle987】,eg3
- https://www.mintos.org/?s=谷歌快排操作流程【tg:seogoogle987】,t3l
- https://www.tcv.org.uk/search/谷歌快排操作流程【tg:seogoogle987】,NMb
- https://www.wattpad.com/search/谷歌快排操作流程【tg:seogoogle987】226
- https://www.youm7.com/Home/Search?allwords=谷歌快排操作流程【tg:seogoogle987】,MET
- https://www.openstreetmap.org/search?query=谷歌快排操作流程【tg:seogoogle987】,hQ1
- https://www.uckfieldtc.gov.uk/?s=谷歌快排操作流程【tg:seogoogle987】,hYU
- https://www.kubb-tool.bfs.admin.ch/en/search?action=CHECK&q=谷歌快排操作流程【tg:seogoogle987】,F4K
- https://www.remit.co.jp/id/?s=谷歌快排操作流程【tg:seogoogle987】,Yrm