订阅更新

CDC与Flink:数据库变更实时同步

Flink 实时计算 20 天 · 第 11 讲 进阶 约 3 分钟读完

CDC原理 · Flink CDC · Binlog捕获 · 全增量一体 · 实战场景

本文目录
  1. 📋 面试题
  2. CDC是什么?
  3. Flink CDC的核心优势:全增量一体
  4. 常用场景
  5. 注意事项
  6. 📌 总结

📋 面试题

什么是CDC?Flink CDC是怎么工作的?你们用CDC做什么?


CDC是什么?

Change Data Capture:捕获数据库的增删改变更,实时同步到下游系统。

MySQL INSERT/UPDATE/DELETE
    ↓ Binlog
Flink CDC 捕获变更
    ↓
写入 Kafka / Doris / Hudi / 数仓

传统方案是每天全量同步(T+1),CDC实现了秒级同步。

Flink CDC的核心优势:全增量一体

传统CDC方案(Debezium + Kafka):
  全量快照 → Kafka → Flink消费
  增量Binlog → Kafka → Flink消费
  需要两套流程,切换复杂

Flink CDC(内置):
  全量快照 + 增量Binlog → 一个Flink作业搞定
  自动从快照切换到增量,无缝衔接
-- Flink SQL直接读MySQL的CDC
CREATE TABLE mysql_orders (
    order_id INT,
    user_id STRING,
    amount DECIMAL(10,2),
    status STRING,
    update_time TIMESTAMP(3),
    PRIMARY KEY (order_id) NOT ENFORCED
) WITH (
    'connector' = 'mysql-cdc',
    'hostname' = 'mysql-host',
    'port' = '3306',
    'username' = 'flink',
    'password' = 'xxx',
    'database-name' = 'shop',
    'table-name' = 'orders'
);

-- 直接同步到Doris
INSERT INTO doris_orders SELECT * FROM mysql_orders;

我们用Flink CDC把MySQL的订单表实时同步到Doris做分析。之前是每天凌晨全量同步(T+1),业务看的是昨天的数据。上了CDC后延迟降到秒级,业务终于能看到实时数据了。

常用场景

场景 说明
实时数仓ODS层 替代离线T+1同步,秒级入仓
缓存更新 DB变更→实时更新Redis/ES
数据库迁移 旧DB→新DB实时同步
实时物化视图 多表JOIN的结果实时更新

注意事项

1. 权限:需要MySQL的REPLICATION SLAVE权限
2. Binlog格式:必须是ROW模式(不能是STATEMENT)
3. 全量阶段锁表:默认全量快照会加全局读锁,
   Flink CDC 2.0+支持无锁读取(chunk-based snapshot)
4. Schema变更:加字段可以,改字段类型需要小心

📌 总结

记忆点 内容
CDC本质 捕获数据库增删改,实时同步
Flink CDC优势 全增量一体,一个作业搞定
实战场景 T+1变实时、缓存更新、DB迁移
注意事项 ROW模式Binlog + REPLICATION权限

▶ 下一篇预告:DAY 12 维表JOIN


Wood聊大数据 | 9年大数据老兵,聊技术、聊职场、聊成长


小红书正文

CDC = Change Data Capture,捕获数据库的增删改实时同步到下游。传统T+1全量同步的替代方案。

Flink CDC最大的优势:全增量一体。全量快照+增量Binlog一个Flink作业搞定,自动无缝切换。不用像Debezium+Kafka那样搞两套。

SQL写法极简:建表指定mysql-cdc连接器,INSERT INTO目标表 SELECT * FROM源表。几行SQL完成实时同步。

我们用它把MySQL订单表实时同步到Doris。之前T+1业务看的是昨天数据,上了CDC延迟降到秒级。

注意事项:MySQL Binlog必须是ROW模式、需要REPLICATION权限、全量阶段注意锁表问题。

刷题进度保存在当前浏览器