基于 Flink SQL CDC 的实时数据同步方案_阿里云技术的博客-CSDN博客_flink sql cdc


本站和网页 https://blog.csdn.net/weixin_43970890/article/details/109571650 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

基于 Flink SQL CDC 的实时数据同步方案_阿里云技术的博客-CSDN博客_flink sql cdc
基于 Flink SQL CDC 的实时数据同步方案
置顶
阿里云技术
于 2020-11-09 10:50:32 发布
11786
收藏
48
文章标签:
flink
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43970890/article/details/109571650
版权
Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的数据同步方案,基于 Flink CDC 同步的解决方案以及更多的应用场景和 CDC 未来开发规划等方面进行介绍和演示。
1、传统数据同步方案 2、基于 Flink SQL CDC 的数据同步方案(Demo) 3、Flink SQL CDC 的更多应用场景 4、Flink SQL CDC 的未来规划
传统的数据同步方案与 Flink SQL CDC 解决方案
业务系统经常会遇到需要更新数据到多个存储的需求。例如:一个订单系统刚刚开始只需要写入数据库即可完成业务使用。某天 BI 团队期望对数据库做全文索引,于是我们同时要写多一份数据到 ES 中,改造后一段时间,又有需求需要写入到 Redis 缓存中。
很明显这种模式是不可持续发展的,这种双写到各个数据存储系统中可能导致不可维护和扩展,数据一致性问题等,需要引入分布式事务,成本和复杂度也随之增加。我们可以通过 CDC(Change Data Capture)工具进行解除耦合,同步到下游需要同步的存储系统。通过这种方式提高系统的稳健性,也方便后续的维护。
Flink SQL CDC 数据同步与原理解析
CDC 全称是 Change Data Capture ,它是一个比较广义的概念,只要能捕获变更的数据,我们都可以称为 CDC 。业界主要有基于查询的 CDC 和基于日志的 CDC ,可以从下面表格对比他们功能和差异点。
经过以上对比,我们可以发现基于日志 CDC 有以下这几种优势:
能够捕获所有数据的变化,捕获完整的变更记录。在异地容灾,数据备份等场景中得到广泛应用,如果是基于查询的 CDC 有可能导致两次查询的中间一部分数据丢失每次 DML 操作均有记录无需像查询 CDC 这样发起全表扫描进行过滤,拥有更高的效率和性能,具有低延迟,不增加数据库负载的优势无需入侵业务,业务解耦,无需更改业务模型捕获删除事件和捕获旧记录的状态,在查询 CDC 中,周期的查询无法感知中间数据是否删除
基于日志的 CDC 方案介绍
从 ETL 的角度进行分析,一般采集的都是业务库数据,这里使用 MySQL 作为需要采集的数据库,通过 Debezium 把 MySQL Binlog 进行采集后发送至 Kafka 消息队列,然后对接一些实时计算引擎或者 APP 进行消费后把数据传输入 OLAP 系统或者其他存储介质。
Flink 希望打通更多数据源,发挥完整的计算能力。我们生产中主要来源于业务日志和数据库日志,Flink 在业务日志的支持上已经非常完善,但是在数据库日志支持方面在 Flink 1.11 前还属于一片空白,这就是为什么要集成 CDC 的原因之一。
Flink SQL 内部支持了完整的 changelog 机制,所以 Flink 对接 CDC 数据只需要把CDC 数据转换成 Flink 认识的数据,所以在 Flink 1.11 里面重构了 TableSource 接口,以便更好支持和集成 CDC。
重构后的 TableSource 输出的都是 RowData 数据结构,代表了一行的数据。在RowData 上面会有一个元数据的信息,我们称为 RowKind 。RowKind 里面包括了插入、更新前、更新后、删除,这样和数据库里面的 binlog 概念十分类似。通过 Debezium 采集的 JSON 格式,包含了旧数据和新数据行以及原数据信息,op 的 u表示是 update 更新操作标识符,ts_ms 表示同步的时间戳。因此,对接 Debezium JSON 的数据,其实就是将这种原始的 JSON 数据转换成 Flink 认识的 RowData。
选择 Flink 作为 ETL 工具
当选择 Flink 作为 ETL 工具时,在数据同步场景,如下图同步结构:
通过 Debezium 订阅业务库 MySQL 的 Binlog 传输至 Kafka ,Flink 通过创建 Kafka 表指定 format 格式为 debezium-json ,然后通过 Flink 进行计算后或者直接插入到其他外部数据存储系统,例如图中的 Elasticsearch 和 PostgreSQL。
但是这个架构有个缺点,我们可以看到采集端组件过多导致维护繁杂,这时候就会想是否可以用 Flink SQL 直接对接 MySQL 的 binlog 数据呢,有没可以替代的方案呢?
答案是有的!经过改进后结构如下图:
社区开发了 flink-cdc-connectors 组件,这是一个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 source 组件。
flink-cdc-connectors 可以用来替换 Debezium+Kafka 的数据采集模块,从而实现 Flink SQL 采集+计算+传输(ETL)一体化,这样做的优点有以下:
开箱即用,简单易上手减少维护的组件,简化实时链路,减轻部署成本减小端到端延迟Flink 自身支持 Exactly Once 的读取和计算数据不落地,减少存储成本支持全量和增量流式读取binlog 采集位点可回溯
基于 Flink SQL CDC 的数据同步方案实践
下面给大家带来 3 个关于 Flink SQL + CDC 在实际场景中使用较多的案例。在完成实验时候,你需要 Docker、MySQL、Elasticsearch 等组件,具体请参考每个案例参考文档。
案例 1 : Flink SQL CDC + JDBC Connector
这个案例通过订阅我们订单表(事实表)数据,通过 Debezium 将 MySQL Binlog 发送至 Kafka,通过维表 Join 和 ETL 操作把结果输出至下游的 PG 数据库。
案例 2 : CDC Streaming ETL
模拟电商公司的订单表和物流表,需要对订单数据进行统计分析,对于不同的信息需要进行关联后续形成订单的大宽表后,交给下游的业务方使用 ES 做数据分析,这个案例演示了如何只依赖 Flink 不依赖其他组件,借助 Flink 强大的计算能力实时把 Binlog 的数据流关联一次并同步至 ES 。
例如如下的这段 Flink SQL 代码就能完成实时同步 MySQL 中 orders 表的全量+增量数据的目的。
CREATE TABLE orders (
order_id INT,
order_date TIMESTAMP(0),
customer_name STRING,
price DECIMAL(10, 5),
product_id INT,
order_status BOOLEAN
) WITH (
'connector' = 'mysql-cdc',
'hostname' = 'localhost',
'port' = '3306',
'username' = 'root',
'password' = '123456',
'database-name' = 'mydb',
'table-name' = 'orders'
);
SELECT * FROM orders
为了让读者更好地上手和理解,我们还提供了 docker-compose 的测试环境。
案例 3 : Streaming Changes to Kafka
下面案例就是对 GMV 进行天级别的全站统计。包含插入/更新/删除,只有付款的订单才能计算进入 GMV ,观察 GMV 值的变化。
Flink SQL CDC 的更多应用场景
Flink SQL CDC 不仅可以灵活地应用于实时数据同步场景中,还可以打通更多的场景提供给用户选择。
Flink 在数据同步场景中的灵活定位
如果你已经有 Debezium/Canal + Kafka 的采集层 (E),可以使用 Flink 作为计算层 (T) 和传输层 (L)也可以用 Flink 替代 Debezium/Canal ,由 Flink 直接同步变更数据到 Kafka,Flink 统一 ETL 流程如果不需要 Kafka 数据缓存,可以由 Flink 直接同步变更数据到目的地,Flink 统一 ETL 流程
Flink SQL CDC : 打通更多场景
实时数据同步,数据备份,数据迁移,数仓构建 优势:丰富的上下游(E & L),强大的计算(T),易用的 API(SQL),流式计算低延迟数据库之上的实时物化视图、流式数据分析索引构建和实时维护业务 cache 刷新审计跟踪微服务的解耦,读写分离基于 CDC 的维表关联
下面介绍一下为何用 CDC 的维表关联会比基于查询的维表查询快。
基于查询的维表关联
目前维表查询的方式主要是通过 Join 的方式,数据从消息队列进来后通过向数据库发起 IO 的请求,由数据库把结果返回后合并再输出到下游,但是这个过程无可避免的产生了 IO 和网络通信的消耗,导致吞吐量无法进一步提升,就算使用一些缓存机制,但是因为缓存更新不及时可能会导致精确性也没那么高。
基于 CDC 的维表关联
我们可以通过 CDC 把维表的数据导入到维表 Join 的状态里面,在这个 State 里面因为它是一个分布式的 State ,里面保存了 Database 里面实时的数据库维表镜像,当消息队列数据过来时候无需再次查询远程的数据库了,直接查询本地磁盘的 State ,避免了 IO 操作,实现了低延迟、高吞吐,更精准。
Tips:目前此功能在 1.12 版本的规划中,具体进度请关注 FLIP-132 。
未来规划
FLIP-132 :Temporal Table DDL(基于 CDC 的维表关联)Upsert 数据输出到 Kafka更多的 CDC formats 支持(debezium-avro, OGG, Maxwell)批模式支持处理 CDC 数据flink-cdc-connectors 支持更多数据库
总结
本文通过对比传统的数据同步方案与 Flink SQL CDC 方案分享了 Flink CDC 的优势,与此同时介绍了 CDC 分为日志型和查询型各自的实现原理。后续案例也演示了关于 Debezium 订阅 MySQL Binlog 的场景介绍,以及如何通过 flink-cdc-connectors 实现技术整合替代订阅组件。除此之外,还详细讲解了 Flink CDC 在数据同步、物化视图、多机房备份等的场景,并重点讲解了社区未来规划的基于 CDC 维表关联对比传统维表关联的优势以及 CDC 组件工作。
希望通过这次分享,大家对 Flink SQL CDC 能有全新的认识和了解,在未来实际生产开发中,期望 Flink CDC 能带来更多开发的便捷和更丰富的使用场景。
Q & A
1、GROUP BY 结果如何写到 Kafka ?
因为 group by 的结果是一个更新的结果,目前无法写入 append only 的消息队列中里面去。更新的结果写入 Kafka 中将在 1.12 版本中原生地支持。在 1.11 版本中,可以通过 flink-cdc-connectors 项目提供的 changelog-json format 来实现该功能。
2、CDC 是否需要保证顺序化消费?
是的,数据同步到 kafka ,首先需要 kafka 在分区中保证有序,同一个 key 的变更数据需要打入到同一个 kafka 的分区里面。这样 flink 读取的时候才能保证顺序。
整理:陈政羽(Flink 社区志愿者)
原文链接
本文为阿里云原创内容,未经允许不得转载。
阿里云技术
关注
关注
点赞
48
收藏
打赏
评论
基于 Flink SQL CDC 的实时数据同步方案
Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的数据同步方案,基于 Flink CDC 同步的解决方案以及更多的应用场景和 CDC 未来开发规划等方面进行介绍和演示。1、传统数据同步方案2、基于 Flink SQL CDC 的数据同步方案(Demo)3、Flink SQL CDC 的更多应用场景4、Flink SQL CDC 的未来规划传统的数据同步
复制链接
扫一扫
postgres-cdc-flink:使用Debezium流式传输PostgreSQL CDC,并使用Flink使用状态流进行充实
04-10
使用Flink丰富Kafka流与另一个流
环境设定
安装PostgreSQL 11+
设置PostgreSQL以允许使用pgoutput将Debezium转换为CDC。 参考
在您的机器/集群上设置Apache Kafka(使用Kafka Connect)
从安装Debezium PostgreSQL连接器
运行Apache Kafka和Kafka Connect
在PostgreSQL中创建表transactions和customers (SQL文件)
使用请求主体向您的Kafka Connect REST接口创建POST请求,如下所示
" name " : " postgres_cdc " ,
" config " : {
" connector.class " : " io.debezium.connector.postgresql.PostgresCon
pg-data-etl:用于postgres数据的ETL工具,建立在`psql`和`pg_dump`命令行工具之上
03-27
pg-data-etl
基于psql和pg_dump命令行工具构建的用于postgres数据的ETL工具。
Python环境
使用conda创建虚拟环境:
cd ~ ./Documents/GitHub/pg-data-etl
conda env create -f env.yml
评论 1
您还未登录,请先
登录
后发表或查看评论
「轻阅读」基于 Flink SQL CDC的实时数据同步方案,附视频教程
zhenghhgz的博客
11-02
3692
IT实战联盟博客:http://blog.100boot.cn
整理:陈政羽(Flink 社区志愿者)原文:https://mp.weixin.qq.com/s/QNJlacBUlkMT7ksKKSNa5Q
Flink 1.11 引入了 Flink SQL CDC,CDC 能给我们数据和业务间能带来什么变化?本文由 Apache Flink PMC,阿里巴巴技术专家伍翀 (云邪)分享,内容将从传统的数据同步方案,基于 Flink CDC 同步的解决方案以及更多的应用场景和 CDC 未来开发规划等方面进行
Flink SQL CDC 上线!我们总结了 13 条生产实践经验
Ververica的博客
09-04
1万+
摘要:7月,Flink 1.11 新版发布,在生态及易用性上有大幅提升,其中 Table & SQL 开始支持 Change Data Capture(CDC)。CDC 被广泛使...
flink-sql所有语法详解-1.15
最新发布
第一片心意的博客
11-12
443
本文为 flink 1.15 官网中 flink sql 语法部分的内容翻译整理。
FlinkX--基于flink的分布式数据同步工具
热门推荐
HuFeiHu
02-07
2万+
GitHub地址:https://github.com/DTStack/flinkx.git
1 什么是FlinkX
FlinkX是在是袋鼠云内部广泛使用的基于flink的分布式离线数据同步框架,实现了多种异构数据源之间高效的数据迁移。
不同的数据源头被抽象成不同的Reader插件,不同的数据目标被抽象成不同的Writer插件。理论上,FlinkX框架可以支持任意数据源类型的数据同步工作。作为...
Flink SQL CDC
chbxw
08-12
615
flink cdc
Flink 1.14 的 mysql CDC 实时增量同步使用
qq_44326412的博客
09-27
1303
Flink 1.14 的 mysql CDC 实时增量同步使用
利用Flink CDC和Flink SQL构建实时数仓Flink写入Doris
lbship的博客
11-14
8140
一、MySQL 开启binlog日志、创建用户
1.开启bin log
MySQL 8.0默认开启了binlog,可以通过代码show variables like "%log_bin%";查询是否开启了,show variables like "%server_id%";查询服务器ID。
上图分别显示了bin long是否开启以及bin log所在的位置。
2.创建用户
CREATE USER 'flinktest' IDENTIFIED BY 'root';
GRANT SELECT,
FlinkSQL系列04-CDC连接器
边看边学
08-31
376
CDC,Change Data Capture,变更数据获取的简称,使用 CDC 我们可以从数据库中获取已提交的更改,并将这些更改发送到下游,供下游使用。flink 的 cdc connector,在核心包中是没有集成的, 需要额外引入依赖。在 flinksql 中,cdc 数据几乎等价于 changelog,核心就在对 record 的 rowkind(+I/-U/+U/-D)进行适配。示例:用 flink-mysql-cdc 连接器,映射源表,并进行查询计算写回mysql表。...
基于FlinkSQLCDC的实时数据同步方案
03-03
业务系统经常会遇到需要更新数据到多个存储的需求。例如:一个订单系统刚刚开始只需要写入数据库即可完成业务使用。某天BI团队期望对数据库做全文索引,于是我们同时要写多一份数据到ES中,改造后一段时间,又有需求需要写入到Redis缓存中。很明显这种模式是不可持续发展的,这种双写到各个数据存储系统中可能导致不可维护和扩展,数据一致性问题等,需要引入分布式事务,成本和复杂度也随之增加。我们可以通过CDC(ChangeDataCapture)工具进行解除耦合,同步到下游需要同步的存储系统。通过这种方式提高系统的稳健性,也方便后续的维护。CDC全称是ChangeDataCapture,它是一个比较广义的概念
Flink结合canal同步到Hbase
someInNeed的博客
05-04
5557
企业运维的数据库最常见的是mysql;但是mysql有个缺陷:当数据量达到千万条的时候,mysql的相关操作会变的非常迟缓;
如果这个时候有需求需要实时展示数据;对于mysql来说是一种灾难;而且对于mysql来说,同一时间还要给多个开发人员和用户操作;
所以经过调研,将mysql数据实时同步到hbase中;
最开始使用的架构方案:
Mysql---logstash—kafka---spa......
flink的实时数据同步
xiaopeigen的专栏
09-01
3124
构建基于flink、kafka、MySQL、hbase的实时数仓,实现:
(1)业务数据全量同步到数据仓库;
(2)业务数据实时增量同步到数据仓库,使用Kafka+canal实现增量数据采集。
数仓架构设计:
(1)全量拉取模块,采用flink-jdbc,或者sqoop
(2)增量实时同步模块,使用Kafka+canal实现增量数据采集。canal是通过模拟成为mysql 的slave节点的方式,监听mysql 的binlog日志来获取数据,binlog日志就是数据增删改的记录,canal解析binl
4.3.1 Flink-流处理框架-Flink CDC数据实时数据同步-何为CDC?
敲代码的乔帮主
03-16
2399
目录
1.写在前面
2.实现机制
3.开源CDC方案对比
1.写在前面
CDC 的全称是 Change Data Capture((变更数据获取),在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。
核心思想是,监测并捕获数据库的 变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下 来,写入到消息中间件中以供其他服务进行订...
聊聊数据同步方案
徐小陌的博客
09-30
7299
当前服务开发中,数据同步必不可少,你是怎么做的呢?
浅谈flink-cdc的使用
chenzuoli的博客
12-19
6794
Flink cdc1.x和2.x区别太大了,如果能升级最好了,不能升级,那么我们怎么避免1.x给我们带来的问题呢?
下面结合我在公司生产的实践,给大家说说。
Flink SQL CDC 实践以及一致性分析
Ververica的博客
03-10
3174
摘要:本文由民生银行王健、文乔分享,主要介绍民生银行 Flink SQL CDC 实践以及一致性分析。内容包括:背景什么是 Flink SQL CDC ConnectorsFlink SQ...
FlinkSQL CDC实现同步oracle数据到mysql
雾岛与鲸的博客
04-17
6284
环境准备
1、flink 1.13.0
2、oracle 11g
3、flink-connector-oracle-cdc 2.1.0
1、oracle环境配置
首先需要安装oracle环境,参考 https://blog.csdn.net/qq_36039236/article/details/124224500?spm=1001.2014.3001.5502
进入容器进行配置:
docker exec -it oracle11 bash
# 切换到oracle用户
su - oracle
# 创建数据需
flink-cdc实时增量同步mysql数据到hive
大数据技术派
09-16
1315
CDC是(Change Data Capture 变更数据获取)的简称。核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT、更新UPDATE、删除DELETE等),将这些变更按发生的顺序完整记录下来,写入到消息中间件中以供其他服务进行订阅及消费。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:精致技术
设计师:CSDN官方博客
返回首页
阿里云技术
CSDN认证博客专家
CSDN认证企业博客
码龄4年
暂无认证
3439
原创
4789
周排名
141
总排名
144万+
访问
等级
4万+
积分
2300
粉丝
519
获赞
265
评论
2909
收藏
私信
关注
热门文章
什么是低代码(Low-Code)?
52992
一文快速了解MaxCompute
17982
10分钟部署一个别人可以访问的在线网站
15284
Quick BI功能篇之(一):20分钟入门
13783
性能压测中的SLA,你知道吗?
11999
最新评论
RTOS成功取代Linux成为天猫精灵OS的关键 -- AliOS Things 维测专题
晴天_QQ:
请问,debug_watch_on函数在那个文件里面?谢谢
一招解决开发环境问题——远程容器开发指南
客服257:
对于优质文章,也许我的评论会迟到,但不会缺席。文章很赞,必须点赞!
1-5-10 快恢在数字化安全生产平台 DPS 中的设计与落地
Passerby_Wang:
写得也太详细了吧,学到了好多 也欢迎博主来我这里指点一二呀
基于 OpenYurt 和 EdgeX 的云边端协同新可能
mpb:
有没有个入门链接啊,怎么安装openyurt+edgex,有没有demo啊,类似kubeedge的count demo之类的
MaxCompute SQL与Hive对比分析及使用注意事项
zhuanke:
原文连接都没有,图片看不清
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
如何通过链路追踪进行定时任务诊
当云原生成为一种显学,对象存储和数据湖如何顺势而为
阿里灵杰:与开发者一起推动AI创新落地
2022
12月
37篇
11月
64篇
10月
12篇
09月
95篇
08月
86篇
07月
89篇
06月
81篇
05月
89篇
04月
93篇
03月
104篇
02月
74篇
01月
80篇
2021年988篇
2020年936篇
2019年1099篇
2018年68篇
目录
目录
最新文章
如何通过链路追踪进行定时任务诊
当云原生成为一种显学,对象存储和数据湖如何顺势而为
阿里灵杰:与开发者一起推动AI创新落地
2022
12月
37篇
11月
64篇
10月
12篇
09月
95篇
08月
86篇
07月
89篇
06月
81篇
05月
89篇
04月
93篇
03月
104篇
02月
74篇
01月
80篇
2021年988篇
2020年936篇
2019年1099篇
2018年68篇
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
阿里云技术
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值

Copyright ©uecom 京ICP备18064371号-1 IPV6
2024-03-29 04:59:48
uenu.com.cn
10.0.12.16