Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle,MongoDB 支持

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: Flink CDC 2.1 正式发布, 更稳定,更强大
本文作者徐榜江 (雪尽)

以下视频为伍翀 (云邪) 分享的 Flink CDC 前世今生:
https://www.bilibili.com/video/BV1jT4y1R7ir/

前言

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

img

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

img

在今年 7 月份,Flink CDC Maintainer 徐榜江 (雪尽) 在北京的 Flink Meetup 首次分享了 Flink CDC 2.0 的设计。随后的 8 月份,Flink CDC 社区发布 2.0 版本,解决了诸多生产实践上的痛点,Flink CDC 社区的用户群也随之迅速壮大。

img

除了社区用户群体的迅速扩大,社区的开发者也在快速增加,目前已经有国内外多家公司的开发者加入到 Flink CDC 社区的开源共建,有来自北美 Cloudera 的开发者,也有来自欧洲 Vinted,Ververica 的开发者,国内的开发者更加活跃,有来自腾讯,阿里,字节等互联网公司的开发者,也有来自 XTransfer,新华文轩等创业公司和传统企业的开发者。此外,国内外的多家云厂商,其流计算产品都已经集成了 Flink CDC,让更多的用户体验到 Flink CDC 的强大与便捷。

一、Flink CDC 2.1 概览

在社区开发者们共同努力下,今天 Flink CDC 社区很开心地宣布 Flink CDC 2.1 正式发布了:https://github.com/ververica/flink-cdc-connectors/releases/tag/release-2.1.0

本文带着你 10 分钟了解 Flink CDC 2.1 版本的重大改进和核心功能。 2.1 版本包含 23 位贡献者贡献的 100+ PR,重点提升了 MySQL CDC 连接器的性能和生产稳定性,重磅推出 Oracle CDC 连接器和 MongoDB CDC 连接器。

  • MySQL CDC 支持百亿级数据的超大表,支持 MySQL 全部数据类型,通过连接池复用等优化大幅提升稳定性。同时提供支持无锁算法,并发读取的 DataStream API,用户可以借此搭建整库同步链路;
  • 新增了 Oracle CDC 连接器, 支持从 Oracle 数据库获取全量历史数据和增量变更数据;
  • 新增了 MongoDB CDC 连接器,支持从 MongoDB 数据库获取全量历史数据和增量变更数据;
  • 所有连接器均支持了 metadata column 功能, 用户通过 SQL 就可以访问库名,表名,数据变更时间等 meta 信息,这对分库分表场景的数据集成非常实用;
  • 丰富 Flink CDC 入门文档,增加多种场景的端到端实践教程。

二、MySQL CDC 连接器改进详解

在 Flink CDC 2.0 版本里,MySQL CDC 连接器提供了无锁算法,并发读取,断点续传等高级特性, 一并解决了诸多生产实践上的痛点,随后大量用户开始投入使用并大规模上线。在上线过程中,我们配合用户解决了诸多生产问题,同时也开发了一些用户迫切需要的高优功能,Flink CDC 2.1 版本针对 MySQL CDC 连接器的改进主要包括两类,一类是稳定性提升,一类是功能增强。

1. 稳定性提升

  • 针对不同的主键分布,引入动态分片算法

    对主键是非数值、Snowflake ID、稀疏主键、联合主键等场景,通过动态分析源表的主键分布的均匀程度,根据分布的均匀程度自动地计算分片大小,让切片更加合理,让分片计算更快。动态分片算法能够很好地解决稀疏主键场景下分片过多的,联合主键场景下分片过大等问题,让每个分片包含的行数尽量维持在用户指定的 chunk size,这样用户通过 chunk size 就能控制分片大小和分片数量,无需关心主键类型。

  • 支持百亿级超大规模表

    在表规模非常大时,以前会报 binlog 分片下发失败的错误,这是因为在超大表对应的 snapshot 分片会非常多,而 binlog 分片需要包含所有 snapshot 分片信息,当 SourceCoordinator 下发 binglog 分片到 SourceReader 节点时,分片 size 超过 RPC 通信框架支持的最大 size 会导致分片下发失败。虽然可以通过修改 RPC 框架的参数缓解分片 size 过大问题,但无法彻底解决。2.1 版本里通过将多个 snapshot 分片信息划分成 group 发送,一个 binlog 分片会切分成多个 group 逐个发送,从而彻底解决该问题。

  • 引入连接池管理数据库连接,提升稳定性

    通过引入连接池管理数据库连接,一方面降低了数据库连接数,另外也避免了极端场景导致的连接泄露。

  • 支持分库分表 schema 不一致时,缺失字段自动填充 NULL 值

2. 功能增强

  • 支持所有 MySQL 数据类型

    包括枚举类型、数组类型、地理信息类型等复杂类型。

  • 支持 metadata column

    用户可以在 Flink DDL 中通过 db_name STRING METADATA FROM 'database_name' 的方式来访问库名(database_name)、表名(table_name)、变更时间(op_ts)等 meta 信息。这对分库分表场景的数据集成非常使用。

  • 支持并发读取的 DataStream API

    在 2.0 版本中,无锁算法,并发读取等功能只在 SQL API 上透出给用户,而 DataStream API 未透出给用户,2.1 版本支持了 DataStream API,可通过 MySqlSourceBuilder 创建数据源。用户可以同时捕获多表数据,借此搭建整库同步链路。同时通过 MySqlSourceBuilder#includeSchemaChanges 还能捕获 schema 变更。

  • 支持 currentFetchEventTimeLag,currentEmitEventTimeLag,sourceIdleTime 监控指标

    这些指标遵循 FLIP-33 [1] 的连接器指标规范,可以查看 FLIP-33 获取每个指标的含义。其中,currentEmitEventTimeLag 指标记录的是 Source 发送一条记录到下游节点的时间点和该记录在 DB 里产生时间点差值,用于衡量数据从 DB 产生到离开 Source 节点的延迟。用户可以通过该指标判断 source 是否进入了 binlog 读取阶段:

    • 即当该指标为 0 时,代表还在全量历史读取阶段;
    • 当大于 0 时,则代表进入了 binlog 读取阶段。

三、详解新增 Oracle CDC 连接器

Oracle 也是使用很广泛的数据库, Oracle CDC 连接器支持捕获并记录 Oracle 数据库服务器中发生的行级变更,其原理是使用 Oracle 提供的 LogMiner [2] 工具或者原生的 XStream API [3] 从 Oracle 中获取变更数据。

LogMiner 是 Oracle 数据库提供的一个分析工具,该工具可以解析 Oracle Redo 日志文件,从而将数据库的数据变更日志解析成变更事件输出。通过 LogMiner 方式时,Oracle 服务器对解析日志文件的进程做了严格的资源限制,所以对规模特别大的表,数据解析会比较慢,优点是 LogMiner 是可以免费使用的。

XStream API 是 Oracle 数据库为 Oracle GoldenGate (OGG) 提供的内部接口, 客户端可以通过 XStream API 高效地获取变更事件,其变更数据不是从 Redo 日志文件中获取,而是从 Oralce 服务器中的一块内存中直接读取,省去了数据落盘到日志文件和解析日志文件的开销,效率更高,但是必须购买 Oracle GoldenGate (OGG) 的 License。

img

Oracle CDC 连接器支持 LogMiner 和 XStream API 两种方式捕获变更事件。理论上能支持各种 Oracle 版本,目前 Flink CDC 项目里测试了 Oracle 11,12 和 19 三个版本。使用 Oracle CDC 连接器,用户只需要声明如下 Flink SQL 就能实时捕获 Oracle 数据库中的变更数据:

img

利用 Flink 丰富的周边生态,用户可以非常方便地写入各种下游存储,如消息队列,数据仓库,数据湖等。

Oracle CDC 连接器已经将底层的 CDC 细节屏蔽,整个实时同步链路,用户只需要几行 Flink SQL,不用开发任何 Java 代码,就可以将 Oracle 的数据变更实时捕获并发送。

此外,Oracle CDC 连接器也提供两种工作模式,即读取全量数据 + 增量变更数据,和只读取增量变更数据。Flink CDC 框架均保证一条不多一条不少的 exactly-once 语义。

四、详解新增 MongoDB CDC 连接器

MongoDB CDC 连接器并不依赖 Debezium,是在 Flink CDC 项目里独立开发。 MongoDB CDC 连接器支持捕获并记录 MongoDB 数据库中实时变更数据,其原理是伪装一个 MongoDB 集群里副本 [4],利用 MongoDB 集群的高可用机制,该副本可以从 master 节点获取完整 oplog(operation log) 事件流。Change Streams API 则提供实时订阅这些 oplog 事件流的能力,可以将这些实时的 oplog 事件流推送给订阅的应用程序。

img

从 ChangeStreams API 获取的更新事件中,对于 update 事件,没有 update 事件的前镜像值,即 MongoDB CDC 数据源只能作为一个 upsert source。不过 Flink 框架会自动为 MongoDB CDC 附加一个 Changelog Normalize 节点,补齐 update 事件的前镜像值(即 UPDATE_BEFORE 事件),从而确保 CDC 数据的语义正确性。

使用 MongoDB CDC 连接器,用户只需要声明如下 Flink SQL 就能实时捕获 MongoDB 数据库中的全量和增量变更数据,借助 Flink 强大的集成能力,用户可以非常方便地将 MongoDB 中的数据实时同步到 Flink 支持的所有下游存储。

img

整个数据捕获过程,用户不需要学习 MongoDB 的副本机制和原理,极大地简化了流程,降低了使用门槛。MongoDB CDC 也支持两种启动模式:

  • 默认的initial 模式是先同步表中的存量的数据,然后同步表中的增量数据;
  • latest-offset 模式则是从当前时间点开始只同步表中增量数据。

此外,MongoDB CDC 还提供了丰富的配置和优化参数,对于生产环境来说,这些配置和参数能够极大地提升实时链路的性能和稳定性。

五、总结和展望

在短短的一年多时间里,Flink CDC 项目取得了现象级的发展和关注,这离不开 Flink CDC 开源社区的贡献者们的无私贡献, 也离不开广大 Flink CDC 用户的积极反馈,正是这两者的良性互动才使得 Flink CDC 项目健康发展,这种良性互动也是开源社区的魅力所在。

Flink CDC 社区将会继续做好开源社区建设,在未来规划中,主要有三个方向:

  • 做深 CDC 技术

    如抽象复用 mysql-cdc 实现,让 Oracle, MongoDB 等也能快速支持无锁读取、并发读取等特性。

  • 做广数据库生态

    我们会支持更丰富的数据库 CDC 数据源,如 TiDB, DB2, MS SqlServer等。

  • 做好数据集成场景

    • 更好地集成实时数仓、数据湖的下游生态,包括 Hudi、Iceberg、ClickHouse、Doris 等。
    • 进一步降低 CDC 数据入湖入仓的门槛,解决整库同步、表结构变更同步等痛点。

致谢

特别感谢来自 Cloudera 公司的 Marton Balassi, Tamas Kiss 贡献的 Oracle CDC 连接器,来自 XTransfer 公司的 Jiabao Sun 贡献的 MongoDB CDC 连接器。

贡献者列表:

Gunnar Morling, Jark Wu, Jiabao Sun, Leonard Xu, MartijnVisser, Marton Balassi, Shengkai, Tamas Kiss, Tamas Zseder, Zongwen Li, dongdongking008, frey66, gongzhongqiang, ili zh, jpatel, lsy, luoyuxia, manmao, mincwang, taox, tuple, wangminchao, yangbin09

[1] https://cwiki.apache.org/confluence/display/FLINK/FLIP-33%3A+Standardize+Connector+Metrics

[2] https://oracle-base.com/articles/8i/logminer

[3] https://docs.oracle.com/cd/E11882_01/server.112/e16545/toc.htm

[4] https://docs.mongodb.com/manual/replication/


12 月 4-5 日,Flink Forward Asia 2021 重磅开启,全球 40+ 多行业一线厂商,80+ 干货议题,带来专属于开发者的技术盛宴。
https://flink-forward.org.cn/

另有首届 Flink Forward Asia Hackathon 正式启动,10W 奖金等你来!
https://www.aliyun.com/page-source//tianchi/promotion/FlinkForwardAsiaHackathon
img


更多 Flink 相关技术问题,可扫码加入社区钉钉交流群
第一时间获取最新技术文章和社区动态,请关注公众号~

image.png

活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算Flink版现开启活动:
99 元试用 实时计算Flink版(包年包月、10CU)即有机会获得 Flink 独家定制卫衣;另包 3 个月及以上还有 85 折优惠!
了解活动详情:https://www.aliyun.com/product/bigdata/sc

image.png

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
8月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
数据采集 监控 Oracle
实时计算 Flink版产品使用问题之如何从Oracle物理备用库中进行实时数据抽取
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
关系型数据库 MySQL 数据处理
实时计算 Flink版产品使用问题之oracle-cdc如何进行动态加表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
存储 运维 监控
实时计算Flink版在稳定性、性能、开发运维、安全能力等等跟其他引擎及自建Flink集群比较。
实时计算Flink版在稳定性、性能、开发运维和安全能力等方面表现出色。其自研的高性能状态存储引擎GeminiStateBackend显著提升了作业稳定性,状态管理优化使性能提升40%以上。核心性能较开源Flink提升2-3倍,资源利用率提高100%。提供一站式开发管理、自动化运维和丰富的监控告警功能,支持多语言开发和智能调优。安全方面,具备访问控制、高可用保障和全链路容错能力,确保企业级应用的安全与稳定。
223 0
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之如何对接Oracle数据源
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之Oracle数据库是集群部署的,怎么进行数据同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
分布式计算 Oracle 关系型数据库
实时计算 Flink版产品使用问题之获取Oracle的数据时无法获取clob类型的数据,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何对oracle进行修改op对值类型
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

相关产品

  • 实时计算 Flink版
  • 推荐镜像

    更多