

长按二维码关注
大数据领域必关注的公众号

(一)Flink CDC是啥
(二)⽀持的连接器
1、最新稳定版2.1.1⽀持列表
2、即将发布的2.2.0⽀持列表(master分⽀)
(三)支持的Flink版本
(一)传统CDC的不足
(二)Flink CDC采集方案
一、Flink CDC概述
(一)Flink CDC是啥
Flink CDC是Flink社区开发的flink-cdc-connectors 组件,这是⼀个可以直接从 MySQL、PostgreSQL 等数据库直接读取全量数据和增量变更数据的 source 组件。
⽬前也已开源,开源地址:
https://github.com/ververica/flink-cdc-connectors
以下是官⽹:
https://ververica.github.io/flink-cdc-connectors/master/
(二)支持的连接器
1、最新稳定版2.1.1⽀持列表
2、即将发布的2.2.0支持列表(master分支)
(三)支持的Flink版本
二、为什么需要Flink CDC
(一)传统CDC的不足
传统的基于 CDC 的 ETL 分析中,数据采集⼯具是必须的,国外⽤户常⽤ Debezium,国内⽤户常⽤阿⾥开源的Canal,采集⼯具负责采集数据库的增量数据,⼀些采集⼯具也⽀持同步全量数据。采集到的数据⼀般输出到消息中间件如 Kafka,然后 Flink 计算引擎再去消费这⼀部分数据写⼊到⽬的端,⽬的端可以是各种 DB,数据湖,实时数仓和离线数仓。
注意, Flink 提供了 changelog-json format,可以将 changelog 数据写⼊离线数仓如 Hive HDFS;对于实时数仓, Flink ⽀持将 changelog 通过 upsert-kafka connector 直接写⼊ Kafka。
Flink CDC的基本理念就是去替换上图中虚线框内的采集组件和消息队列,从⽽简化传输链路,降低维护成本。同时更少的组件也意味着数据时效性能够进⼀步提⾼。
(二)Flink CDC采集方案
(1)统⼀采集⼯具:封装Debezium⽀持主流的数据库
(2)简化ETL链路:将采集⼯具和Kafka整体替换
(3)降低使⽤⻔槛:⽀持Flink SQL⼤⼤降低使⽤⻔槛
基于FlinkCDC,我们只需要通过⼀个 Flink SQL 作业就完成了 CDC 的数据采集,加⼯和同步,下⾯是⼀个例⼦:
--需求:同步MySQL的orders表到TiDB的orders表
--1、定义MySQL中orders表的cdc源表
CREATE TABLE mysql_orders (
id INT NOT NULL,
product_id BIGINT,
...
PRIMARY KEY(id)
) WITH (
'connector' = 'mysql-cdc',
'hostname' = 'xx',
'port' = '3306',
'username' = 'xx',
'password' = 'xx',
'database-name' = 'xx',
'table-name' = 'orders'
);
--2、创建TiDB结果表
CREATE TABLE tidb_orders(
id INT NOT NULL,
product_id BIGINT,
...
PRIMARY KEY(id)
)
WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://localhost:3306/xx',
'table-name' = 'orders'
);
--3、从源表读取数据写⼊结果表
INSERT INTO tidb_orders
SELECT * FROM mysql_orders;
复制
所以基于Flink CDC的⽅案是⼀个纯 SQL 作业,⼤⼤降低了降低了使⽤⻔槛。当然,我们也可以利⽤ Flink SQL 提供的丰富语法进⾏数据清洗、分析、聚合,⽽不仅仅是简单的数据同步。利⽤ Flink SQL 双流 JOIN、维表 JOIN、UDTF 语法可以⾮常容易地完成实时打宽,以及各种业务逻辑加⼯。
三、常见CDC方案比较
(1)基于⽇志的⽅式,可以很好的做到增量同步(准实时);
(2)⽽基于查询的⽅式必须侵⼊业务才能做到增量同步的,⽽且是T+1的增量同步。
(1)在 Flink CDC 上操作相当简单,可以通过 Flink SQL 去操作这些数据;
(2)但是像 DataX、 Debezium 等则需要通过脚本或者模板去做,所以⽤户的使⽤⻔槛会⽐较⾼。
完