Flink CDC在阿里云DataWorks数据集成应用实践

摘要:本文整理自阿里云 DataWorks 数据集成团队的高级技术专家 王明亚(云时)老师在 Flink Forward Asia 2023 中数据集成专场的分享。内容主要为以下四部分:

  1. 阿里云 DataWorks 数据集成介绍
  2. 基于 Flink CDC 数据集成新版引擎架构和原理
  3. 新版引擎在 DataWorks 数据集成产品化案例分享
  4. 未来规划

一、阿里云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 对任务进行问题的智能诊断,帮助用户更加高效便捷的排查,降低用户的问题排查门槛。最后在数据离线实时质量校验方面,进一步推进使其产品落地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙开发】生命周期

1. UIAbility组件生命周期 UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态。 UIAbility生命周期状态 1.1 Create状态 Create状态为在应用加载过程中,UIAbility实例创建完成时触发,系统会调用onCreate()回调。可以在该回调中…

会议室预约小程序开源版开发

会议室预约小程序开源版开发 支持设置免费预约和付费预约、积分兑换商城、积分签到等 会议室类目,提供多种类型和设施的会议室选择,满足不同会议需求。 预约日历,展示会议室预约情况,方便用户选择空闲时段。 预约记录&#xff0…

秋招复习笔记——八股文部分:网络基础

TCP/IP 网络模型 应用层 最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传…

java绘图在ubuntu报错

把JRT网站部署到ubuntu桌面系统上,开始没测试绘图部分功能,只试了连PostGreSql部分正常。后面试了生成位图部分发现报错。 报下面错误: (ColorModel.java:220)\n\tat java.desktop/java.awt.image.BufferedImage.(BufferedImage.java:286)\n…

windows Webrtc +VS2019 (M124)下载编译以及调通测试demo

下载depot tools 设置梯子 git config --global http.proxy 127.0.0.1:10000 git config --global https.proxy 127.0.0.1:10000 下载 $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 设置depot_tools目录为环境变量 下载webrtc # 设置系统代…

2024年4月最新版GPT

2024年4月最新版ChatGPT/GPT4, 附上最新的使用教程。 随着人工智能技术的不断发展,ChatGPT和GPT4已经成为了人们日常生活中不可或缺的助手。2024年4月,OpenAI公司推出了最新版本的GPT4,带来了更加强大的功能和更加友好的用户体验。本文将为大家带来最新版GPT4的实用…

微软提供用于测试框架的SDK

微软发布了 MSTest SDK。 MSTest SDK基于 MSBuild Project SDK 系统构建并基于MSTest 运行程序,旨在为开发人员提供更好的使用 Microsoft 单元测试框架 MSTest 进行测试的体验。 微软表示, 4 月 11 日发布的MSTest SDK通过合理的默认设置和灵活的选项使…

安全中级-环境安装(手动nginx以及自动安装php,mysql)

为了方便大家跟bilibili课程,出了第一节环境 bilibili搜凌晨五点的星可以观看相关的教程 一、环境 ubentu 二、nginx手动安装 2.1第一步 wget https://nginx.org/download/nginx-1.24.0.tar.gz 2.2下载好安装包以后解压 tar -zxvf nginx-1.21.6.tar.gz2.3安…

Keepalived+LVS+nginx搭建nginx高可用集群

一、简介 nginx是一款非常优秀的反向代理工具,支持请求分发,负载均衡,以及缓存等等非常实用的功能。在请求处理上,nginx采用的是epoll模型,这是一种基于事件监听的模型,因而其具备非常高效的请求处理效率…

IDEA: Unable to resolve table ‘xxx‘

描述: 在 IDEA 连接到数据库后,SQL 语句提示 Unable to resolve table 表名,且其它字段也飘红报错。 解决: 右键点击数据库,选择 Tools -> Manage Shown Schemas... 勾选你所使用的数据库即可: 1、2、3…

ShardingSphere:强大的分布式数据库中间件【图文】

ShardingSphere的诞生 ShardingSphere的结构 Sharding-JDBC :它提供了一个轻量级的 Java 框架,在 Java 的 JDBC 层提供额外的服务。使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动&…

模板小细节与了解STL

1、模板小细节 1、在C中&#xff0c;已经写好了有关swap函数来供我们使用&#xff1a; 2、编译器也会偷懒&#xff0c;除非我们给强制要求&#xff1a; 通过调试我们可以看到&#xff0c;编译器不会主动去找模板&#xff0c;这时候我们要在add后加<>即可让Add使用模板函…

免费的 ChatGPT、GPT4.0、GPTs、Midjourney-AI绘画(国内版)

&#x1f525;博客主页&#xff1a;只恨天高 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容…

鸿蒙原生应用元服务-访问控制(权限)开发场景与权限声明

一、场景介绍 应用的APL&#xff08;Ability Privilege Level&#xff09;等级分为normal、system_basic和system_core三个等级&#xff0c;默认情况下&#xff0c;应用的APL等级都为normal等级。权限类型分为system_grant和user_grant两种类型。 二、配置文件权限声明 应用需要…

Docker 入门介绍及简单使用

Docker 的简单介绍 中文官网&#xff1a;Docker中文网 官网 英文官网&#xff1a;Docker: Accelerated Container Application Development Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包应用及其依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 …

(十二)C++自制植物大战僵尸游戏多用户存档实现(一)

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/8UFMs 游戏存档 游戏存档允许玩家保存游戏进度&#xff0c;以便在之后的时间继续游戏。通过存档&#xff0c;玩家可以暂停游戏并在需要时重新开始&#xff0c;而不必从头开始或重新完成已经完成的任务。游戏通常提供多个…

HarmonyOS开发实战:【亲子拼图游戏】

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式益智拼图游戏&#xff0c;可以两台设备同时开启一局拼图游戏&#xff0c;每次点击九宫格内的图片&#xff0c;都会同步更新两台设备的图片位置。效果图如下&#xff1a; 说明&#xff1a; 本示例涉及使…

OWASP发布10大开源软件风险清单

3月20日&#xff0c;xz-utils 项目被爆植入后门震惊了整个开源社区&#xff0c;2021 年 Apache Log4j 漏洞事件依旧历历在目。倘若该后门未被及时发现&#xff0c;那么将很有可能成为影响最大的软件供应链漏洞之一。近几年爆发的一系列供应链漏洞和风险&#xff0c;使得“加强开…

对桥接模式的理解

目录 一、背景二、桥接模式的demo1、类型A&#xff08;形状类型&#xff09;2、类型B&#xff08;颜色类型&#xff09;3、需求&#xff1a;类型A要使用类型B&#xff08;如&#xff1a;红色的方形&#xff09;4、Spring的方式 一、背景 在《对装饰器模式的理解》中&#xff0…

“手撕“数组一些简单的习题

目录 1.数组转字符串 2.数组拷贝 3.求数组中元素的平均值 4.查找数组中指定元素(顺序查找) 5.查找数组中指定元素(二分查找) 6.数组排序(冒泡排序) 7.数组逆序 1.数组转字符串 先让我们看看为什么要转字符串&#xff1a; int[] arr {1,2,3,4,5,6}; System.out.printl…