Flink CDC系列之:Apache Flink CDC 项目的各个模块作用
- 项目整体架构
- 核心模块详解
-
- [flink-cdc-common - 公共基础模块](#flink-cdc-common - 公共基础模块)
- [flink-cdc-runtime - 运行时核心模块](#flink-cdc-runtime - 运行时核心模块)
- [flink-cdc-connectors - 连接器集合](#flink-cdc-connectors - 连接器集合)
- [flink-cdc-composer - 作业编排模块](#flink-cdc-composer - 作业编排模块)
- [flink-cdc-pipeline - 数据管道模块](#flink-cdc-pipeline - 数据管道模块)
- [flink-cdc-ui - 用户界面模块](#flink-cdc-ui - 用户界面模块)
- [flink-cdc-e2e-tests - 端到端测试](#flink-cdc-e2e-tests - 端到端测试)
- 数据流架构
- 核心特性实现
- 使用场景
项目整体架构
bash
flink-cdc/
├── flink-cdc-common/ # 公共基础模块
├── flink-cdc-runtime/ # 运行时核心模块
├── flink-cdc-composer/ # 作业编排模块
├── flink-cdc-connectors/ # 连接器集合
├── flink-cdc-pipeline/ # 数据管道模块
├── flink-cdc-ui/ # 用户界面模块
├── flink-cdc-e2e-tests/ # 端到端测试
└── docs/ # 文档
核心模块详解
flink-cdc-common - 公共基础模块
作用: 提供整个项目共享的基础组件和工具类
主要包含:
- SourceConfig, SinkConfig - 配置类定义
- CDCEvent, SchemaChangeEvent - 事件模型
- 序列化器、异常类、常量定义
- 公共工具类和工具方法
flink-cdc-runtime - 运行时核心模块
作用: CDC 管道执行的核心运行时逻辑
关键组件:
-
SQL 函数扩展(如你之前查看的 BuiltInScalarFunction)
-
CDC Source/Sink 基础类
-
Schema 演进处理器
-
数据转换逻辑
-
状态管理
// 核心运行时流程
CDC Source → 数据解析 → Schema 演进 → 数据转换 → CDC Sink
flink-cdc-connectors - 连接器集合
作用: 提供各种数据库的 CDC 连接器实现
包含的子模块:
- flink-connector-mysql-cdc - MySQL 连接器
- flink-connector-postgres-cdc - PostgreSQL 连接器
- flink-connector-oracle-cdc - Oracle 连接器
- flink-connector-sqlserver-cdc - SQL Server 连接器
- flink-connector-mongodb-cdc - MongoDB 连接器
- flink-connector-db2-cdc - DB2 连接器
- flink-connector-tidb-cdc - TiDB 连接器
每个连接器负责:
- 数据库日志解析(binlog/WAL)
- 数据快照机制
- 故障恢复处理
- 数据格式转换
flink-cdc-composer - 作业编排模块
作用: 提供 CDC 作业的编排和部署能力
主要功能:
- Flink SQL 生成器 - 自动生成 CDC 管道 SQL
- 作业图构建器 - 构建 Flink 作业执行图
- 部署管理器 - 管理作业部署到不同环境
- 配置优化器 - 自动优化作业配置
bash
-- 示例:自动生成的 Flink SQL
CREATE TABLE mysql_source (...)
WITH ('connector' = 'mysql-cdc', ...);
CREATE TABLE kafka_sink (...)
WITH ('connector' = 'kafka', ...);
INSERT INTO kafka_sink SELECT * FROM mysql_source;
flink-cdc-pipeline - 数据管道模块
作用: 提供声明式的数据管道定义和管理
核心特性:
-
Pipeline DSL - 管道定义语言
-
连接管理 - 数据源和目标连接配置
-
转换规则 - 数据映射和转换规则
-
监控指标 - 管道运行状态监控
示例:管道定义
pipeline:
source:
type: mysql
config: {...}
transforms:
- type: filter
config: {...}
sink:
type: kafka
config: {...}
flink-cdc-ui - 用户界面模块
作用: 提供 Web 界面用于可视化管理和监控 CDC 作业
功能包括:
- 连接器管理 - 可视化配置数据源
- 管道设计器 - 拖拽式管道设计
- 作业监控 - 实时监控作业状态
- 数据预览 - 查看变更数据流
- 告警管理 - 设置监控告警规则
flink-cdc-e2e-tests - 端到端测试
作用: 确保整个 CDC 管道的端到端正确性
测试范围:
- 连接器集成测试 - 各数据库连接器功能验证
- 数据一致性测试 - 确保数据不丢失、不重复
- 故障恢复测试 - 测试断点续传能力
- 性能基准测试 - 性能回归测试
- 升级兼容性测试 - 版本升级测试
数据流架构
数据库源 → CDC连接器 → Flink运行时 → 转换处理 → 目标系统
↓ ↓ ↓ ↓ ↓
MySQL mysql-cdc flink-cdc- SQL函数 Kafka
PostgreSQL postgres-cdc runtime 转换规则 Elasticsearch
Oracle oracle-cdc Schema演进 Hudi
核心特性实现
1. 变更数据捕获
- 基于数据库日志的实时数据捕获
- 支持全量快照 + 增量日志模式
- 精确一次语义保证
2. Schema 演进
- 自动处理 DDL 变更
- 向后兼容的 Schema 演化
- 类型映射和转换
3. 容错机制
- Checkpoint 状态管理
- 断点续传能力
- 故障自动恢复
4. 扩展性
- 插件化连接器架构
- 自定义函数扩展
- 灵活的管道配置
使用场景
- 实时数据同步 - 数据库到数据仓库/数据湖
- 微服务数据共享 - 服务间数据变更通知
- ETL 管道 - 实时数据提取和加载
- 数据备份 - 实时数据备份和容灾
- CQRS 架构 - 命令查询职责分离
这个模块化设计使得 Flink CDC 能够灵活适应各种数据集成场景,同时保持良好的可扩展性和维护性。