1. 什么是 Flink TiDB CDC?
简单说就是用 Flink 实时抓取 TiDB 数据库的数据变化(比如新增、修改、删除),并将这些变化数据以流的形式处理,用于实时分析、同步到其他系统等场景。
TiDB 本身是分布式数据库,而 Flink 是流处理引擎,两者的结合适合需要高吞吐、低延迟的大规模数据处理场景[7][8]。
2. 底层原理
- TiDB 侧:通过 TiCDC 组件(TiDB 的变更数据捕获工具)捕获数据变更,类似 MySQL 的 binlog[2][4]。
- Flink 侧:使用
flink-connector-tidb-cdc
连接器,订阅 TiCDC 的变更数据流,将数据转换为 Flink 可处理的流式数据[8][10]。 - 处理流程:
3. 典型应用场景
- 实时数仓更新:将 TiDB 的订单、用户行为数据实时同步到 Hive/Iceberg 等数仓[7]。
- 跨系统数据同步:比如 TiDB 数据实时写入 Elasticsearch 做搜索,或同步到 Redis 做缓存[7][8]。
- 业务监控:实时统计 GMV(如电商场景),一旦数据变化立刻计算[4][7]。
- 数据一致性修复:通过 CDC 捕捉异常数据,触发告警或自动修复[9]。
4. 配置关键步骤
- 开启 TiCDC:在 TiDB 集群中启用 TiCDC 组件,并配置同步任务。
- 添加 Flink 依赖:引入
flink-connector-tidb-cdc
的 Jar 包(需确认版本兼容性)[1][5]。 - 编写 Flink 代码:通过 DataStream 或 SQL 方式定义数据源,例如:
TiDBSource<String> source = TiDBSource.<String>builder() .hostname("tidb-host") .port(4000) .database("test_db") .tableList("user_table") .deserializer(new JsonDebeziumDeserializationSchema()) .build();
- 处理与输出:定义数据处理逻辑(如过滤、聚合),并写入目标系统[5][8]。
5. 优势与注意点
- 优势:
- 注意点:
6. 常见问题
Q:TiDB 没有主键怎么办?
A:部分 CDC 工具依赖主键,建议表设计时添加主键,或使用 TiDB 的隐式 row_id。Q:同步延迟高如何排查?
A:检查 TiCDC 吞吐量、Flink 反压情况,或调整 Flink 并行度[10]。