Flink CDC介绍及原理

CDC (Change Data Capture) 是一种用于捕捉数据库变更数据的技术,Flink 从 1.11 版本开始原生支持 CDC 数据(changelog)的处理,目前已经是非常成熟的变更数据处理方案。

Flink CDC Connectors 是 Flink 的一组 Source 连接器,是 Flink CDC 的核心组件,这些连接器负责从 MySQL、PostgreSQL、Oracle、MongoDB 等数据库读取存量历史数据和增量变更数据。在 2020 年 7 月开源,社区保持了相当高速的发展,平均两个月一个版本,在开源社区的关注度持续走高,也逐渐有越来越多的用户使用 Flink CDC 来快速构建实时数仓和数据湖。

Flink CDC 2.1的改进

Flink CDC 2.1 版本重点提升了 MySQL CDC 连接器的性能和生产稳定性,重磅推出 Oracle CDC 连接器和 MongoDB CDC 连接器。新增内容如下:

(1)MySQL CDC 支持百亿级数据的超大表,支持 MySQL 全部数据类型,通过连接池复用等优化大幅提升稳定性。同时提供支持无锁算法,并发读取的 DataStream API,用户可以借此搭建整库同步链路;

(2)新增 Oracle CDC 连接器, 支持从 Oracle 数据库获取全量历史数据增量变更数据

(3)新增 MongoDB CDC 连接器,支持从 MongoDB 数据库获取全量历史数据增量变更数据

(4)所有连接器均支持metadata column 功能, 用户通过 SQL 就可以访问库名,表名,数据变更时间等 meta 信息,这对分库分表场景的数据集成非常实用;

丰富 Flink CDC 入门文档,增加多种场景的端到端实践教程。

Flink CDC 1.x 问题点

1、加锁时间不确定,极端情况会锁住数据库

针对 一致性加锁的痛点 Flink cdc 2.x 借鉴 Netflix 的 DBlog paper 设计了全程无锁算法

2、因为 Flink CDC 底层是基于 Debezium,Debezium 架构是单节点,所以 Flink CDC 1.x 只支持单并发。在全量读取阶段,如果表非常大 (亿级别),读取时间在小时甚至天级别,用户不能通过增加资源去提升作业速度。

3、全量读取阶段不支持 checkpoint

Flink CDC  读取分为两个阶段,全量读取和增量读取,目前全量读取阶段是不支持 checkpoint 的;

因此会存在一个问题:当我们同步全量数据时,假设需要 5 个小时,当我们同步了 4 小时的时候作业失败,这时候就需要重新开始,再读取 5 个小时

Flink cdc 2.x 中定期为源执行检查点,在故障转移的情况下,作业将从上次成功的检查点状态重新启动并恢复,并保证恰好一次语义

Flink CDC 高频面试 13 问(万字长文吐血总结!)

你可能感兴趣的:(flink,flink,大数据)