一、背景与需求分析
在数据集成和数据仓库建设中,多数据源(如MySQL、PostgreSQL、API、Excel等)异构同步是很常见的场景。一般来说,我们会使用DataX将这些数据源中的全量数据批量同步到数仓(如Doris),为BI分析和数据服务提供实时或准实时的数据支撑。
但现实是,数据源本身在不断变化——新增、修改甚至删除。全量同步虽然简单但效率低,特别是数据量大时,重新全量同步会浪费大量计算和存储资源。因此,如何对已经进入数仓的数据集进行高效的增量更新(只同步变更部分)就成为核心问题。
Flink CDC作为一款优秀的实时数据集成框架,通过捕获数据库变更日志(Binlog、WAL等),能够实现对主流关系型数据库的秒级同步和增量抓取,是解决数据集增量更新的最佳选择之一。
本文将基于如下业务流程,讲解如何用FlinkCDC进行多数据源同步数仓后的“增量更新方案”:
多数据源(MySQL、PG、API、Excel) → DataX全量同步到Doris → 再通过FlinkCDC实现增量数据修正、更新数仓(Doris)
二、整体方案设计
1. 数据流简述
- 第一步:DataX全量同步
- 将MySQL、PG、API、Excel数据批量落库到Doris(通常为ODS层)
- 第二步:Flink CDC增量更新
- 对于MySQL、PG两类数据库,通过FlinkCDC捕获增量变更事件(INSERT/UPDATE/DELETE)
- 实时将变更数据流入并更新到Doris
- API和Excel这类数据源通常难以做到实时增量采集,需结合业务逻辑定期拉取、对比、生成变更流
2. 关键技术点
- Flink CDC连接器:支持MySQL、PostgreSQL等主流数据源
- Doris Sink:可选择Flink官方Sink、StreamLoad方式或Doris Connector(建议Flink-Doris-Connector)
- 数据去重与主键更新:业务表需有明确主键,Doris表建议选用UNIQUE/MERGE ON DUPLICATE KEY UPDATE等模型,方便以最新变更为准
三、FlinkCDC MySQL/PG增量同步实现
1. 创建Doris目标表
假设以MySQL为例,假设业务表有主键"id",同步到Doris需建为唯一键模型(UNIQUE KEY):
CREATE TABLE ods_user (
id