Flink CDC:新一代数据集成框架.pdf
《Flink CDC:新一代数据集成框架.pdf》由会员分享,可在线阅读,更多相关《Flink CDC:新一代数据集成框架.pdf(154页珍藏版)》请在咨信网上搜索。
1、卷首语:数据集成的发展和未来作者:伍翀(云邪)Apache Flink PMC Member&Committer阿里巴巴技术专家在信息爆炸的时代,为了从海量数据中洞察业务价值,驱动运营决策,企业通常会构建用于数据分析的数据仓库。数据仓库的数据一般来源于多个分散的、异构的数据源,通过数据集成技术将数据整合在一起,消除数据孤岛,便于后续的分析。近年来,面向分析的数据系统发展迅速,各种新型的 OLAP 系统开始显露锋芒,数据湖和 Lakehouse 的概念也变得炙手可热。然而,数据集成仍然是人们通往数据分析之路上的主要障碍。构建一个中心化的数据仓库本身是一个艰巨的任务,每个数据源都需要单独的程序和工
2、具来摄取、清洗和导入数据。尤其是随着业务的发展,企业对于数据实时性的要求越来越高。在 2021 年 6 月,Apache 董事会宣布决定终止 Apache Sqoop 项目,以 Apache Sqoop 为代表的传统离线数据同步开始退出历史舞台。这也代表着传统的离线数据同步已经无法满足用户的需求,人们开始追求更为实时的数据同步方案。基于数据库事务日志的 Change Data Capture(CDC)技术作为一种更为优雅和先进的实时数据同步方案,开始广泛应用于增量数据集成中。然而诸如 Canal 等专注于纯增量数据同步的开源项目也逐渐面临活跃度越来越低的困境,因为用户想要集成的数据从来不是单独
3、的历史数据部分,或是单独的增量数据部分,而是历史数据和增量数据一体化地集成到数据仓库。这也是为什么如 Debezium、Flink CDC 等全增量一体化数据集成框架能越来越受欢迎的原因之一。Flink CDC 是 Apache Flink 的一个重要组件,主要使用了 CDC 技术从各种数据库中获取变更流并接入到Flink 中。Apache Flink 作为一款非常优秀的流处理引擎,其 SQL API 又提供了强大的流式计算能力,因此结合 Flink CDC 能带来非常广阔的应用场景。例如,Flink CDC 可以替代传统的 DataX 和 Canal 工具做实时数据同步,将数据库的全量和增量
4、数据同步到消息队列和数据仓库中。也可以做实时数据集成,将数据库数据实时入湖入仓。还可以做实时物化视图,通过 SQL对数据库数据做实时关联、打宽、聚合,并将物化结果写入到湖仓中。为了帮助读者能更全面地了解 Flink CDC,我们特地编撰了这本中文专刊。在这本专刊里你可以了解到:FlinkCDC 的底层原理设计是什么样的?Flink CDC 如何保证数据读取的一致性?如何一步步快速上手 Flink CDC?以及 Flink CDC 在生产实践上的宝贵经验!作为新一代数据集成框架,Flink CDC 希望解决的问题很简单:“成为数据从源头连接到数据仓库的管道,屏蔽过程中的一切复杂问题,让用户专注于
5、数据分析”。但是为了让数据集成变得简单,其中的挑战仍然非常多:比如百亿数据如何高效入湖入仓?千表数据如何稳定入湖入仓?如何“一键”整库同步?表结构频繁变更,如何自动同步表结构变更到湖和仓中?我们会在本专刊中介绍 Flink CDC 在这些方向取得的一些初步进展,Flink CDC 未来也会持续朝着这些方向改进。我们后续还会组织发布更多关于这些场景的 Flink CDC 系列专刊。目录5623335067688293105106116130141原理技术篇Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle、MongoDB 支
6、持Flink CDC 端到端一致性分析Flink CDC 如何简化实时数据入湖入仓快速入门篇基于 Flink CDC 构建 MySQL 和 Postgres 上的 Streaming ETL基于 Flink CDC 同步 MySQL 分库分表,构建 Iceberg 实时数据湖Flink CDC 实现 MySQL 数据实时写入 Apache Doris 数仓生产实践篇37 手游基于 Flink CDC+Hudi 湖仓一体方案实践Flink CDC 上线!我们总结了 13 条生产实践经验Flink CDC 实时抽取 Oracle 数据,实践和调优Flink MongoDB CDC 在 XTrans
7、fer 的生产实践实时计算 Flink 版与开源 Flink CDC 版本对比155原理技术篇Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.0 正式发布,详解核心改进1)DataX 不支持增量同步,Canal 不支持全量同步。虽然两者都是非常流行的数据同步工具,但在场景支持上仍不完善。2)在全量+增量一体化同步方面,只有 Flink CDC、Debezium、Oracle Goldengate 支持较好。3)在架构方面,Apache Flink 是一个非常优秀的分布式流处理框架,因此 Flink CDC 作为Apache Flink 的一个组件具有非常灵活的水平扩展
8、能力。而 DataX 和 Canal 是个单机架构,在大数据场景下容易面临性能瓶颈的问题。4)在数据加工的能力上,CDC 工具是否能够方便地对数据做一些清洗、过滤、聚合,甚至关联打宽?Flink CDC 依托强大的 Flink SQL 流式计算能力,可以非常方便地对数据进行加工。而Debezium 等则需要通过复杂的 Java 代码才能完成,使用门槛比较高。5)另外,在生态方面,这里指的是上下游存储的支持。Flink CDC 上下游非常丰富,支持对接MySQL、PostgreSQL 等数据源,还支持写入到 TiDB、HBase、Kafka、Hudi 等各种存储系统中,也支持灵活的自定义 con
9、nector。二、Flink CDC 项目讲到这里,先带大家回顾下开发 Flink CDC 项目的动机。Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.0 正式发布,详解核心改进在此基础上,我们调研了一些 CDC 技术,最终选择了 Debezium 作为 Flink CDC 的底层采集工具。Debezium 支持全量同步,也支持增量同步,也支持全量+增量的同步,非常灵活,同时基于日志的 CDC 技术使得提供 Exactly-Once 成为可能。将 Flink SQL 的内部数据结构 RowData 和Debezium 的数据结构进行对比,可以发现两者是非常相似的。每条
10、 RowData 都有一个元数据 RowKind,包括 4 种类型,分别是插入(INSERT)、更新前镜像(UPDATE_BEFORE)、更新后镜像(UPDATE_AFTER)、删除(DELETE),这四种类型和数据库里面的 binlog 概念保持一致。而 Debezium 的数据结构,也有一个类似的元数据 op 字段,op 字段的取值也有四种,分别是 c、u、d、r,各自对应 create、update、delete、read。对于代表更新操作的 u,其数据部分同时包含了前镜像(before)和后镜像(after)。通过分析两种数据结构,Flink 和 Debezium 两者的底层数据是可以
11、非常方便地对接起来的,大家可以发现 Flink 做 CDC 从技术上有着天然的匹配性。Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.0 正式发布,详解核心改进该例子是通过 Flink CDC 去同步数据库数据并写入到 TiDB,用户直接使用 Flink SQL 创建了产品和订单的 MySQL-CDC 表,然后对数据流进行 JOIN 加工,加工后直接写入到下游数据库。通过一个 Flink SQL 作业就完成了 CDC 的数据分析、加工和同步。大家会发现这是一个纯 SQL 作业,这意味着只要会 SQL 的业务线同学都可以完成此类工作。与此同时,用户也可以利用 Flink
12、 SQL 提供的丰富语法进行数据清洗、分析和聚合。此外,利用 FlinkSQL 双流 JOIN、维表 JOIN、UDTF 语法可以非常容易地完成数据打宽,以及各种业务逻辑加工。而对于其他 CDC 工具(如 Debezium)来说,进行数据的清洗过滤都是非常困难的,更无法支持复杂的聚合和关联了。Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.0 正式发布,详解核心改进3.2 Debezium 锁分析Flink CDC 底层封装了 Debezium,Debezium 同步一张表分为两个阶段:全量阶段:查询当前表中所有记录;增量阶段:从 binlog 消费变更数据。大部分用
13、户使用的场景都是全量+增量同步,加锁是发生在全量阶段,目的是为了确定全量阶段的初始位点,保证增量+全量实现一条不多,一条不少,从而保证数据一致性。从下图中我们可以分析全局锁和表锁的一些加锁流程,左边红色线条是锁的生命周期,右边是 MySQL 开启可重复读事务的生命周期。Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.0 正式发布,详解核心改进我们借鉴了 Netflix 的 DBlog 这篇论文的设计思想,其中描述的无锁算法如下图所示:左边是 Chunk 的切分算法描述,Chunk 的切分算法其实和很多数据库的分库分表原理类似,通过表的主键对表中的数据进行分片。假设每个
14、 Chunk 的步长为 10,按照这个规则进行切分,只需要Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.0 正式发布,详解核心改进比如正在读取 Chunk-1,Chunk 的区间是 K1,K10,首先直接将该区间内的数据 select 出来并把它存在 buffer 中,在 select 之前记录 binlog 的当前位点(低位点),select 完成后再次记录binlog 的当前位点(高位点)。然后开始消费从低位点到高位点的 binlog,并合并到 buffer 中。图中的-(k2,100)和+(k2,108)记录表示这条数据的值从 100 更新到 108;第二条记
15、录是删除 k3;第三条记录是更新 k2 为 119;第四条记录是 k5 的数据由原来的 77 变更为 100。观察图片中右下角最终的输出,会发现在消费该 chunk 的 binlog 时,出现的 key 是 k2、k3、k5,我们前往 buffer 将这些 key 做标记。对于 k1、k4、k6、k7 来说,在高位点读取完毕之后,这些记录没有变化过,所以这些数据是可以直接输出的;对于改变过的数据,则需要将增量的数据合并到全量的数据中,只保留合并后的最终数据。例如,k2 最终的结果是 119,那么只需要输出+(k2,119),而不需要中间发生过改变的数据。Flink CDC 2.0 正式发布,详
16、解核心改进Flink CDC 2.0 正式发布,详解核心改进汇报的主要目的是为了后续分发 binlog chunk(如下图)。因为 Flink CDC 支持全量+增量同步,所以当所有 Snapshot Chunk 读取完成之后,还需要消费增量的 binlog,这是通过下发一个binlog chunk 给任意一个 Source Reader 进行单并发读取实现的。对于大部分用户来讲,其实无需过于关注如何无锁算法和分片的细节,了解整体的流程就好。Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.0 正式发布,详解核心改进MySQL CDC 2.0 用时 13 分钟;MySQ
17、L CDC 1.4 用时 89 分钟;读取性能提升 6.8 倍。四、未来规划关于 CDC 项目的未来规划,我们希望围绕稳定性,进阶 feature 和生态集成三个方面展开。稳定性通过社区的方式吸引更多开发者的开源力量提升 Flink CDC 的成熟度;支持 Lazy Assigning。Lazy Assigning 的思路是将 chunk 先划分一批,而不是一次性进行全部划分。当前 Source Reader 对数据读取进行分片是一次性全部划分好所有 chunk,例如有1 万个 chunk,可以先划分 1 千个 chunk,而不是一次性全部划分,在 SourceReader 读取完 1 千 c
18、hunk 后再继续划分,节约划分 chunk 的时间。进阶 Feature支持 Schema Evolution。当数据同步的过程中,经常遇到源表中添加了一个字段,用户希望目标表也能自动增加该字段,并自动同步该字段的新增内容;支持 Watermark Pushdown 通过 CDC 的 binlog 获取到一些心跳信息,这些心跳的信息可以作为一个 Watermark,通过这个心跳信息可以知道到这个流当前消费的一些进度;支持元数据列。分库分表合并同步的场景下,用户通常希望知道每条数据来源哪个库哪个表,而元数据列便提供了访问表名库名等元信息;整库同步。用户要同步整个数据库只需一行 SQL 语法即可
19、完成,而不用每张表定义一个 DDL和 query。生态集成集成更多上游数据库,如 Oracle、MS SQLServer。Cloudera 目前正在积极贡献 oracle-cdcconnector;在入湖层面,Hudi 和 Iceberg 写入上有一定的优化空间,例如在高 QPS 入湖的时候,数据分布有比较大的性能影响,这一点可以通过与生态打通和集成继续优化。Flink CDC 2.0 正式发布,详解核心改进Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle、MongoDB 支持Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle、MongoDB 支持
20、作者|徐榜江(雪尽)阿里巴巴前言CDC(Change Data Capture)是一种用于捕捉数据库变更数据的技术,Flink 从 1.11 版本开始原生支持 CDC 数据(changelog)的处理,目前已经是非常成熟的变更数据处理方案。Flink CDC Connectors 是 Flink 的一组 Source 连接器,是 Flink CDC 的核心组件,这些连接器负责从 MySQL、PostgreSQL、Oracle、MongoDB 等数据库读取存量历史数据和增量变更数据。Flink CDC Connectors 是一个独立的开源项目,从 2020 年 7 月开源以来,社区保持了相当高
21、速的发展,平均两个月一个版本,在开源社区的关注度持续走高,也逐渐有越来越多的用户使用 FlinkCDC 来快速构建实时数仓和数据湖。Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle、MongoDB 支持Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle、MongoDB 支持除了社区用户群体的迅速扩大,社区的开发者也在快速增加,目前已经有国内外多家公司的开发者加入到 Flink CDC 社区的开源共建,有来自北美 Cloudera 的开发者,也有来自欧洲 Vinted,Ververica 的开发者,国内的开发者更加活跃,有来自腾讯,阿里,字节等互联网
22、公司的开发者,也有来自 XTransfer,新华文轩等创业公司和传统企业的开发者。此外,国内外的多家云厂商,其流计算产品都已经集成了 Flink CDC,让更多的用户体验到 Flink CDC 的强大与便捷。一、Flink CDC 2.1 概览在社区开发者们共同努力下,Flink CDC 社区很开心地宣布 Flink CDC 2.1 正式发布了:https:/ 10 分钟了解 Flink CDC 2.1 版本的重大改进和核心功能。2.1 版本包含 23 位贡献者贡献的 100+PR,重点提升了 MySQL CDC 连接器的性能和生产稳定性,并且重磅推出 OracleCDC 连接器和 Mongo
23、DB CDC 连接器。MySQL CDC 支持百亿级数据的超大表,支持 MySQL 全部数据类型,通过连接池复用等优化大幅提升稳定性。同时提供支持无锁算法,并发读取的 DataStream API,用户可以借此搭建整库同步链路;新增了 Oracle CDC 连接器,支持从 Oracle 数据库获取全量历史数据和增量变更数据;新增了 MongoDB CDC 连接器,支持从 MongoDB 数据库获取全量历史数据和增量变更数据;所有连接器均支持了 metadata column 功能,用户通过 SQL 就可以访问库名,表名,数据变更时间等 meta 信息,这对分库分表场景的数据集成非常实用;丰富
24、Flink CDC 入门文档,增加多种场景的端到端实践教程。二、MySQL CDC 连接器改进详解在 Flink CDC 2.0 版本里,MySQL CDC 连接器提供了无锁算法,并发读取,断点续传等高级特性,一并解决了诸多生产实践上的痛点,随后大量用户开始投入使用并大规模上线。在上线过程中,我们配合用户解决了诸多生产问题,同时也开发了一些用户迫切需要的高优功能,Flink CDC 2.1 版Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle、MongoDB 支持Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle、MongoDB 支持支持 metad
25、ata column用户可以在 Flink DDL 中通过 db_name STRING METADATA FROM database_name 的方式来访问库名(database_name)、表名(table_name)、变更时间(op_ts)等 meta 信息。这对分库分表场景的数据集成非常使用。支持并发读取的 DataStream API在 2.0 版本中,无锁算法,并发读取等功能只在 SQL API 上透出给用户,而 DataStream API未透出给用户,2.1 版本支持了 DataStream API,可通过 MySqlSourceBuilder 创建数据源。用户可以同时捕获多表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Flink CDC:新一代数据集成框架 CDC 新一代 数据 集成 框架
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【Stan****Shan】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【Stan****Shan】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。