Flink CDC:一个基于流的实时数据集成工具

在实时数仓、实时数据集成快速发展的今天,如何稳定、低延迟、低成本地把业务数据从数据库同步到下游系统,成为很多数据团队绕不开的话题。

过去,我们可能会选择 Canal + Kafka + 自研消费,或者离线同步工具 + 定时调度;如今,越来越多团队开始把目光投向一个新的选择:Flink CDC。

Flink CDC(Change Data Capture) 是一个基于 Apache Flink 的流式数据集成平台,用于实时捕获外部数据源中的数据变更(INSERT、UPDATE、DELETE 以及 DDL),并且将其以流的方式同步到下游系统(例如消息队列、数据库、数据仓库或数据湖)。

Flink CDC 深度集成并且由 Apache Flink 驱动,源代码托管在 GitHub:

https://github.com/apache/flink

功能特性

  • 基于日志的 CDC:Flink CDC 通过解析数据库的操作日志,例如 MySQL Binlog、PostgreSQL WAL、Oracle Redo Log、MongoDB OpLog,实现低延迟(亚秒级)、低侵入、无锁的变更捕获,性能和一致性优于查询型 CDC。

  • 基于 YAML 的数据管道:使用基于配置文件的 Pipeline 模型自动生成并提交 Flink 作业,基本无需编写 Java 或者 SQL 代码,极大地降低了使用门槛。

  • 丰富的连接器:Flink CDC 提供了丰富的连接器生态系统,用于与各种外部系统进行交互;数据源(Source)支持 MySQL、Oracle、PostgreSQL、Db2、MongoDB、SQL Server、TiDB、Vitess,目标(sink)支持 Apache Doris、Elasticsearch、Fluss、Hudi、Iceberg、Kafka、MaxCompute、OceanBase、Paimon、StarRocks。

  • 表结构自动同步:Schema Evolution 功能可以用于将上游的 DDL 变更事件同步到下游,例如创建新表、添加新列、重命名列或更改列类型、删除列、截断和删除表等。

  • 全量增量一体化:Flink CDC 提供增量快照框架,启动时自动做一致性全量快照,快照完成后无缝切换到增量日志。

  • 精确一次语义:Exactly-Once 语义可以确保每一条数据变更在整个处理链路中一定且只被处理一次,同时只产生一次结果。

  • 数据转换:Transform 模块允许用户对数据进行字段级或行级的加工处理,例如字段选择、重命名、派生字段或者函数计算。

  • 路由规则:Route 代表一个路由规则,用来匹配一个或多个源表,并且映射到目标表。最常见的场景是合并子数据库和子表,将多个上游源表路由到同一个目标表。

配置示例

以下是一个 YAML 文件的示例,它定义了一个数据管道,可以从 MySQL 捕获实时变更,并且将它们同步到 Apache Doris:

yaml 复制代码
source:
  type: mysql
  hostname: localhost
  port: 3306
  username: root
  password: 123456
  tables: app_db.\.*
  server-id: 5400-5404
  server-time-zone: UTC

sink:
  type: doris
  fenodes: 127.0.0.1:8030
  username: root
  password: ""
  table.create.properties.light_schema_change: true
  table.create.properties.replication_num: 1

pipeline:
  name: Sync MySQL Database to Doris
  parallelism: 2

通过使用 flink-cdc.sh 提交以上 YAML 文件,一个 Flink 作业将会被编译并部署到指定的 Flink 集群。

官方文档列出了常用的数据管道构建示例,参考文档:

https://nightlies.apache.org/flink/flink-cdc-docs-release-3.6/zh/docs/get-started/introduction/

相关推荐
用户3610588626123 小时前
Flink 内存分配源码深度剖析:从启动计算到运行时动态分配的完整链路
大数据·flink
Thomas21432 天前
flink paimon 参数 ignore_progress=true
大数据·flink
源图客2 天前
Apache Flink 2.3.0(最新版本)
大数据·flink·apache
abigalexy3 天前
Flink核心疑难问题、踩坑盲点-汇总
大数据·flink·big data·bigdata
Sayai3 天前
Kafka 跨数据中心日志同步实战:MirrorMaker 2 选型对比 + Flink 中继任务落地(双中心互备与消费者组隔离避坑)
大数据·运维·分布式·flink·kafka·消息队列·高可用
渣渣盟4 天前
Flink 状态管理深度剖析:从 KeyedState 到 RocksDB,状态如何存储、恢复与扩缩容
android·大数据·flink
@小匠5 天前
Flink + Iceberg 批量失败复盘:一次超时如何变成 Hive Metastore 锁泄漏
大数据·hive·flink
Sayai5 天前
Flink 日志解析任务性能优化实战:正则/Grok 预编译、Guava 缓存权重陷阱与 ES 写入隔离
java·大数据·性能优化·flink·实时计算
渣渣盟5 天前
Flink SQL 流批一体:从 SQL 到执行计划,优化器如何工作?
大数据·sql·flink
Flynn Liang8 天前
物联网时序数据乱序问题全链路治理:从设备到存储的五层实战(附 Flink/Kafka/IoTDB 配置级代码)
flink·kafka·iot·iotdb·emqx·乱序·时序数据