Flink CDC 实现原理

在了解Flink CDC之前,我们先来了解下什么是cdc?兄弟们,回忆下,cdc 全称是Change Data Capture, 中文的意思就是变更记录获取。

所以兄弟们是不是立马就想到了mysql的binlog 日志,以及对应的canal, canal 就是专门获取对应的数据变更并同步变更数据给其他人的。没错,Flink cdc 也就是这个作用了,说白了就是做的一个数据集成的作用,实时把变动的数据同步给应用方呗。

然后兄弟们就会想,该不会Flink cdc 也是用的canal 去做的这个数据同步吧,那必然不是的,毕竟canal 是不支持数据的全量数据同步的。Flink cdc 用的是老外的数据同步工具,Debezium,取其精华,去其糟粕嘛,其实除了debezium ,还有些比如oracle Goldgenerate,也实现了全量和增量同步的,如下所示:
在这里插入图片描述
Flink 官方没有选择oracle 的可能就是Debezium 更加完善点了,关键是Debezium 里面的数据结构和Flink 里面的数据结构非常相似,更容易兼容

一:Flink cdc 1.x 的实现及问题
如上所示,Flink cdc 1.x 使用Debezium实现了异构数据源之间的同步,但是还是出现了一些问题,主要是Debezium 是会对表加锁的,debezium 也是单线程的,所以大家在使用的时候就产生了如下问题,比如mysql hang 住了,不支持多并发,容错性不高;

想要弄明白前面的几个问题,我们先来了解下Flink cdc 下面Debezium 是如何加锁同步数据的呢?请看下图:

在这里插入图片描述
简单点来说,就是一旦开启同步数据的事务了,Debezium 就会对全局加锁,先把当前加锁的这个时间点的全部数据select 出来,这需要一点时间的,然后这个时间节点的select 事务啊,update 事务啊,都会被阻塞,严重的时候会导致mysql 的整个进程都被hang 住了,提供不了服务了,所以我们Flink 就要进入2.x 时代。

二:Flink 2.x 时代

Flink 2.x 时代就是说既然大家都觉得这个锁没有必要了,那就把Debezium的锁踢开,哈哈哈,与时俱进嘛;踢开之后我们就引用了Netfix 的DBlog paper 的思想;
在这里插入图片描述
DBlog paper的思想说白了也是分而治之的思想,既然我对全局表加锁会有比较大的影响,那么我把数据做切分,每一段数据做大数据一致,那是不是就可以保证数据的整体一致呢?怎么说呢

假如mysql的表里面有100万条数据,那么我把这些数据切分成1万个chunk(chunk 本意是树干,在这里就是一段数据集合的意思);每个chunk 里面有100条数据,先记录这个chunk里面的最低位和最高位;比如是101和200;读完之后把这个数据存入一个缓冲区,我们叫做buffer;如果后期有个binlog的chunk 过来,比如是105,150和160的数据发生了变化,那么我们就会针对相应的值改动,并不会改动全部的值,改动效率就比较高了;这就是无锁的大致思想了;

水平扩展说白了就是把原来的这个单线程换成多线程的处理嘛,由Flink的source 去实现的;做个checkpoint 也是对最新的那些buffer和chunk 做个checkpoint ,实现了容错;

三:Flink 3.x 的实现

Flink 2.x 实现了性能的优化,Flink 3.x 更多的是实现了业务的优化,比如支持分库分表,整库同步等等,可以参考 Flink CDC 3.0 正式发布,详细解读新一代实时数据集成框架

  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flink CDC(Change Data Capture)是Flink的一个功能模块,用于从数据源(如数据库)中捕获变化,并将变化的数据以流的形式传输到Flink的DataStream中进行处理。下面是Flink CDC的工作原理: 1. 数据源连接: Flink CDC首先与数据源建立连接,通常是与关系型数据库进行连接。它会监控数据库的日志或者使用特定的协议与数据库进行交互,以便实时捕获数据源中的变化。 2. 变更日志解析: 一旦与数据源建立连接,Flink CDC会解析数据源的变更日志(如MySQL的binlog),识别出插入(INSERT)、更新(UPDATE)、删除(DELETE)等操作,并提取出变更前后的数据。 3. 变更数据传输: 解析出的变更数据将被转换为Flink的DataStream,并通过网络传输到Flink集群中。这些数据以流的形式被持续地传输到Flink任务中进行处理。 4. 数据处理: 在Flink任务中,开发人员可以定义特定的数据处理逻辑,对捕获到的变更数据进行实时处理和分析。可以使用Flink提供的各种算子和函数来实现转换、聚合、过滤等操作。 5. 结果输出: 处理后的结果可以根据需要输出到不同的目标,如文件系统、消息队列、数据库等。Flink提供了各种输出连接器和Sink函数,可以将结果输出到不同的存储或服务中。 总结: Flink CDC通过与数据源建立连接,捕获数据源的变化,并将变更数据以流的形式传输到Flink任务中进行实时处理和分析。它利用数据源的变更日志或者特定的协议来实现数据捕获,然后将捕获到的数据转换为Flink的DataStream进行处理。这样可以实现对数据源变化的实时感知和实时处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值