摘要:本文整理自阿里云 DataWorks 数据集成团队的高级技术专家 王明亚(云时)老师在 Flink Forward Asia 2023 中数据集成专场的分享。内容主要为以下四部分:
- 阿里云 DataWorks 数据集成介绍
- 基于 Flink CDC 数据集成新版引擎架构和原理
- 新版引擎在 DataWorks 数据集成产品化案例分享
- 未来规划
一、阿里云DataWorks数据集成介绍
1. 下图是阿里云DataWorks数据集成发展历史
阿里云 DataWorks 数据集成发展已经超过 10 年,起步于 2011 年的阿里巴巴内部数据平台事业部同步中心。2014 年正式对外提供云服务功能,2019年完成公共云商业化,发布了独享资源组功能。2020年发布了实时同步,支持整库全增量以及资源连通性自助诊断等功能。2023 年初,基于 Flink CDC 重构后的新版引擎功能正式发布上线,具备流批一体、弹性扩缩容等功能特性。
2. 业务规模
目前业务规模离线和实时,每天同步的数据量在10PB量级、10万亿量级。服务阿里巴巴内部淘宝、天猫、Lazada、菜鸟等130多个BU,同时支持国内、海外Region,金融云、政务云等21个 Region。
3. 数据上云核心枢纽
阿里云 DataWorks 数据集成是数据上云的核心枢纽(异构数据存储、可靠、安全、低成本、可弹性扩展的数据同步平台),支持几十种丰富的异构数据源,并且支持这些异构数据源之间任意组合,包含关系型数据库、MMP、NoSQL、文件储存、消息流等各大类型系统。同时,也支持复杂的网络全联通,无论用户的数据源在公网、IDC 机房、VPC 内还是跨云等场景,数据集成都具备成熟可以提供连接到各数据源的网络解决方案,支持用户进行数据迁移。同时针对云上各种丰富的数据集成场景,支持包括整库迁移、周期性离线同步、全增量同步等多种同步能力。同时背靠 DataWorks,数据集成具备成熟的安全控制机制,以及完善的运维报警监控能力。
4. 离线数据同步原理
下面介绍基于 Flink CDC 引擎重构之前的技术架构。
首先离线同步:底层基于数据库 JDBC 协议或者数据源 SDK 来进行读写。
例如:用户购买 1,000万 的数据,要周期性离线同步到阿里云大数据存储系统上,做离线数仓分析,我们会在源端对其进行数据分片切分,针对不同的数据字段类型,有多种不同的切分算法,最常见的就是按照主键,进行数据分片切分,每一个切分后的分片就是一个 Task,若干个 Task 分为一个 Task Group,被调度系统调度到资源层 Worker 上进行同步,Worker 是进行数据实际读写的基本物理执行单元,这样就能够完成离线同步的能力。
5. 实时数据同步原理
区别于离线同步,实时同步主要是基于数据库变更日志增量解析或者消息订阅等方式来进行的。
例:以 MySQL 为例,基于 Socket MySQL Dump 协议实时订阅 Binlog 二进制流, 将订阅到的二进制流进行事件解析, Connector 进行转换处理, 最后在目标端进行数据重放。
6. 阿里云数据集成解决方案系统
除了离线同步与实时同步外,云上很多业务场景是需要客户把历史的数据,比如关系型数据库里的数据,先全量同步到云上,然后再启动实时增量同步。2020年,我们发布了整库全增量解决方案的产品功能,具备自动批量进行用户表结构从源端迁移到目标端系统,迁移完成后,自动启动全量离线同步任务,将历史数据一次性搬迁到云上;全量同步完成后,系统会进行自动的位点衔接,启动实时增量任务将增量数据实时同步到目标端系统,完成自动的全增量流程。不需要用户手工每张表配置单独的离线和实时任务,大幅简化了配置流程,提升任务配置运维效率。
7. 期望的数据集成引擎
上述介绍了在基于 Flink CDC 引擎重构之前的技术架构,同时随着技术的迭代演进,我们期望的数据引擎应该具备四大特性:
1流批一体:希望维护一套统一的框架和技术栈,具有既能够支持流同步,也能够支持批同步的能力,可以极大提高团队研发效能。
2开源生态:需要有一个丰富的开源生态和活跃社区,能够复用和集成社区丰富的 Connector。
3全事件流同步:支持 DML、DDL、HeartBeat 等全事件流的解析及同步。
4良好的性能和成本:同步资源能够弹性扩缩容,支持分布式的海量数据同步,具备高吞吐高性能特性。
Flink CDC 以及 Flink 引擎本身,就具备上述特性,因此我们基于 Flink CDC 进行了 DataWorks 数据集成新版引擎的重构升级。
二、基于Flink CDC数据集成新版引擎架构和原理
1. 数据集成平台架构
重构以后的数据集成平台架构,从系统分层角度看主要分为4层。
第一层是接入层,接入层直接面向用户,用户可以通过 OPEN API 的方式来集成创建同步任务, 也可以通过 Web UI 的方式, 进行界面向导化的一键简单配置。接入层主要支持流控、权限检查、任务创建、数据源的更新删除等功能。
第二层是管控层,管控层主要负责任务的全生命周期的管理,包括开发态(作业配置、作业检查),运行态(任务渲染、任务启停),运维态(告警监控、Metric 查询展示)等。
第三层是引擎层,主要分为两个部分:Catalog Server 和新的流批一体同步引擎。Catalog Server 主要用于和用户的数据源进行连接,例如进行用户数据源的连通性检查、表结构获取、结构迁移等功能。接下来重点介绍基于 Flink CDC 框架 + DataX(多种数据格式 Reader & Writer)重构后的新版流批一体同步引擎。
第四层是资源层,支持任务资源调度部署、ECS 物理机等多种资源部署形态。
2. 基于Flink CDC新版引擎架构特点
基于 Flink CDC 新版引擎架构特点,首先在功能特性方面,得益于 Flink 流批一体架构,因此新版引擎天然具备了流批一体架构特点,同时支持整库多表、分库分表全增量同步、全事件流解析和同步、分布式动态限流等能力特性。在性能成本方面,支持按照 Primary key 进行 Shuffle 可以避免数据热点提高同步性能,新版引擎对 Sink 进行了增强,支持实时写多表、支持连接复用等特性,可以极大节省同步资源和成本。最后,基于 Flink 底层资源调度层,具备了分布式云原生架构特点。
3. 基于Flink CDC新版引擎架构设计
下面是重构以后基于 Flink CDC 新版引擎架构设计,针对数据集成的业务场景,新版引擎基于 Flink CDC 进行功能上的扩展和增强。源端大量的数据库(例如 MySQL、PostgreSQL、MongoDB 等), 基于 Flink CDC Source 自动完成全量数据初始化、增量数据同步以及全增量自动切换,同时 CDC Source 具备加表不断流等能力特性。CDC Source 将源端数据读取转换以后,数据在执行拓扑中,会经过事件流解析器、 数据分发器(支持多种分发模式:primary key,table,shard key, random 等),Table Mapping(为支持整库多表、分库分表场景服务),以及大量内置的 Transformer 算子(字符串替换 、动态列配置、数据脱敏、JSON 解析、数据过滤、逻辑删除等)。最后,基于Flink FLIP-191 Sink V2和 Coordinator 机制,对现有的 Sink connector 进行增强,支持并发写多表、schema evolution 等能力。
4. 架构详解-全事件流解析与同步
首先针对 DML 事件,会将其解析为 INSERT、UPDATE 或 DELETE 数据,如果是全量初始化数据 DML 事件会全部解析为 INSERT 数据。HeartBeat 事件,主要用于更新延迟指标、及同步给下游系统起到保活作用等。DDL事件,将原始的 DDL SQL 变更基于 Druid 解析为标准的 AST 抽象语法树,所有的目标端 Sink Connector 对接标准的 AST 抽象语法树,将其转换为目标端可执行的 DDL 事件进行重放,无需关心源端的数据库类型。
5. 架构详解-Table Mapping
Table Mapping 支持源端表到目标表表名及列名映射,例如:在分库分表场景下,要支持用户的表名正则匹配,需要将满足用户自定义的正则条件下的表,数据都同步写到目标端某一个表里,就需要依赖于 Table mapping 映射的能力。在离线同步场景下,需要兼容现有的离线同步能力,用户除表名映射以外,用户的源端字段列名和目标端字段列名也不一定相同,则还需要进行列名映射。
6. 架构详解-Power CDC Sink
Power CDC Sink 是基于 Flink FLIP-191 Sink V2 以及 Coordinator 机制进行了增强,支持单 SubTask 实时写多表,支持链接复用以节省资源,同时支持实时的 Schema Evolution。
基于 Coordinator 机制开发了 Schema Evolution Coordinator,在 schema evolution 场景下能够实现分布式协调,保证 DML 和 DDL 的执行有序性。具体工作流程是,当某个 Subtask 收到 DDL 事件后,Coordinator 可以分布式协调其他的 Subtask,驱动其它 Subtask 先将数据全部 Flush 到目标端并暂停写数据,Flush 完成后 Coordinator 驱动收到 DDL 事件的 Subtask 进行 schema evolution 执行,执行完成后由 Coordinator 通知其它 Subtask 继续同步数据,基于上述协调过程可以保证在 Schema Evolution 时,DML 和 DDL 执行的有序性、保证数据一致。同时,结合 Primary key Shuffle 等数据分发策略,能够避免数据热点问题提升同步性能。
7. 架构详解-事件通知及异常诊断
实时同步任务因为是 7 * 24 小时运行,用户需要能够对其有比较强的可观测性,为了提升任务的可观测性,新版引擎扩展新增了大量可观测指标,当任务出现故障或收到预期外的事件时,任务会将 Metric 实时推送到我们自研的报警系统 Mario, Mario 在收到 Metric 后根据用户设定的告警规则自动触发告警用户介入处理。例如:用户在 DataWorks 数据集成平台上配置了任务心跳告警、任务延迟告警、 DDL 事件通知报警,当出现任务延迟、任务异常失败或者出现其它预期外的事件,能够及时以短信、电话、钉钉、Webhook 等多种方式告警到用户,用户能够及时到数据集成运维平台上做任务运维处理。数据集成运维平台支持 Logview 可视化异常诊断,帮助客户分析任务延迟、异常等原因并提供相应的解决建议,提升客户运维效率。
三、新版引擎在DataWorks数据集成产品化案例分享
1. 新版引擎数据集成产品化演示和案例分享
这里分享新版引擎 MySQL 到阿里云实时数仓 Hologres 全增量实时同步产品 Demo。
首先在数据集成数据源列表里,建两个数据源 MySQL 和 Hologres ,用户的 MySQL 在用户自己云上的 VPC 里,与 DataWorks 网络环境不一样,由于网络环境不同默认网络不可达,测试连通性会报错,数据集成提供了自动的连通性诊断级网络打通工具,可以帮助用户进行自动的网络打通和连通性检查。这样就不需要用户的数据源,与 DataWorks 网络环境在一个网络环境下, 可以轻松实现跨网络环境的数据集成能力。
数据源建好测试连通性通过以后,在数据集成页面进行任务配置,在此次演示中建三个库,每个库里有三张表,演示分库分表写入场景。数据集成支持表名替换, 附加逻辑列等能力,任务配置完成后点击启动执行,会进行自动的结构迁移,全量数据初始化,全增量自动切换。
2. 案例分享
阿里云某出海客户,使用 DataWorks 数据集成基于 Flink CDC 的新版引擎,将海外云厂商 1 和海外云厂商 2 的跨云、跨时区 MySQL 实例,全增量实时同步汇总到阿里云实时数仓 Hologres,做实时数仓分析。基于任务执行调度可以弹性扩缩容,以及新版引擎 Power CDC Sink 支持连接复用写多表等能力特性,可以为客户带来较大的资源成本优化, 用户成本下降近 60%。
四、未来规划
未来 DataWorks 与 Flink CDC 会更加紧密深度的合作,在数据集成引擎的通用能力上期望和社区共同演进,在任务智能弹性扩容方面进行更多维的探索,进一步帮助客户降本增效。
同时能够基于 AI 对任务进行问题的智能诊断,帮助用户更加高效便捷的排查,降低用户的问题排查门槛。最后在数据离线实时质量校验方面,进一步推进使其产品落地。