本文主要分享Flink CDC 1.0 至3.0的发展历程,了解其背后的关键特性和发展趋势,探讨其在大数据领域的影响和价值。
一、CDC概述
CDC是一种用以掌控数据变化的软件架构(技术思路),用于捕获和传递数据库中发生的数据变化。当数据库中发生增(INSERT)/删(DELETE)/改(UPDATE)时,它可以将这种变化实时/非实时地将这些变更以事件流的形式推送给其他应用程序或数据存储系统。
例如通过数据库触发器Trigger-based或数据库事务日志Log-based的方式实现CDC:
1)Trigger-based:在数据库进行 INSERT/ UPDATE/ DELETE 操作的时候,会触发执行另一段SQL,就可以在另一张影子表中记录数据的变化。接下来做数据同步就很简单,只需要关注影子表里的记录,然后对应再执行一次即可。
2)Log-based:和Trigger-based非常相似,所有数据的变动要么放下日志里,要么放在影子表里,内容上是一致的。但 Log-based 方法更好利用了数据库本身的核心能力,即大部分关系型数据,在数据发生变化的时候都会产生日志,如果直接用这样的日志来进行数据同步,不但可以在不同的系统间保证 ACID 可靠,对数据库的影响几乎可以忽略不计(不需要修改表结构,也不需要新增影子表),并且日志是实时产生的,可以有更好的时效性:
除了上述示例,还有其它比如表元信息Table metadata或表求差Table differences 的实现方式,皆聚焦于如何实现 Capture 这一动作。
总而言之,CDC 技术极大地提升了数据集成的效率和实时性,使得不同系统间的异构数据同步和共享变得更加可靠和高效,在现代数据架构中扮演着重要的角色。
下面,扬帆起航,一起看看基于Flink是如何实现CDC的吧。
二、Flink CDC 1.0
1、架构设计
传统的CDC ETL链路中,采集到的数据一般输出到消息中间件如Kafka,然后Flink计算引擎再去消费这一部分数据写入到目的端,目的端可以是各种DB,数据湖,实时数仓和离线数仓等。
Flink CDC 1.0中,基于Flink的两个特性:Dynamic Table 和 Changelog Stream:
-
Dynamic Table:Flink SQL 定义的动态表,动态表和流的概念是对等的;流可以转换成动态表,动态表也可以转换成流。
-
Chan