数据集成面试专题
概述
数据集成面试高频覆盖:CDC 原理、全量/增量、数据一致性、断点续传、工具选型。本文按原理、一致性、工具、场景四类整理高频问答。
一、CDC 原理
Q1:CDC 是什么?有哪几类?
CDC = 变更数据捕获
基于查询(轮询时间戳/版本)
基于日志(binlog/WAL)Q2:基于查询 vs 基于日志?
| 对比 | 查询 | 日志 |
|---|---|---|
| 实时性 | 低 | 高 |
| 删除感知 | 否 | 是 |
| 侵入 | 查询压力 | 开启日志 |
| 复杂度 | 低 | 高 |
Q3:binlog 有哪几种格式?
| 格式 | 说明 |
|---|---|
| STATEMENT | 记录 SQL |
| ROW | 记录行变更(CDC 推荐) |
| MIXED | 混合 |
row 格式:
精确记录增删改
增量解析可靠二、数据一致性
Q4:怎么保证不丢数据?
1. 位点持久化(binlog offset)
2. 消费确认(ack)
3. 事务边界
4. 监控位点延迟Q5:怎么防止数据重复?
| 手段 | 说明 |
|---|---|
| 幂等写 | 主键覆盖 |
| 唯一键 | 目标约束 |
| 去重 | 消费去重 |
| 事务 | 原子提交 |
Q6:快照与增量怎么衔接不重不漏?
1. 记录 binlog 位点(快照起点)
2. 全量快照导出
3. 快照中变更仍在 binlog
4. 快照完成从位点续传
5. 用快照一致性保证Q7:端到端 Exactly-Once 怎么实现?
Source 位点 + 事务 + 幂等 Sink:
Kafka 事务
幂等目标写
或唯一键去重三、断点续传
Q8:同步中断怎么恢复?
1. 全量:分片 + 已同步片记录
2. 增量:binlog 位点
3. 重启 → 从位点继续Q9:全量同步的断点怎么做?
splitPk 分片:
按主键范围分片
每片独立完成记录
失败重跑未完成片Q10:为什么同步要幂等?
重试/重放可能重复:
幂等(主键覆盖/去重)
保证可恢复四、工具选型
Q11:Canal vs Debezium?
| 对比 | Canal | Debezium |
|---|---|---|
| 源 | MySQL | 多库 |
| 输出 | MQ/自定义 | Kafka |
| 架构 | 自研 | Kafka Connect |
| 场景 | 单库 | 多库统一 |
Q12:DataX 能实时吗?
DataX:离线批量
实时用 Canal/Debezium/Flink CDC
组合:DataX 全量 + CDC 增量Q13:Flink CDC 特点?
与 Flink 无缝:
实时数仓直接 SQL
全量+增量一体
多库支持Q14:SeaTunnel vs DataX?
SeaTunnel:离线+流式统一
DataX:纯离线
多源多目标 → SeaTunnel五、异构同步
Q15:异构数据源类型不匹配?
映射规则:
类型映射(int→long)
字段映射(列→列)
转换函数
默认值/过滤Q16:源库和目标库结构不同?
| 处理 | 说明 |
|---|---|
| 字段重命名 | 映射 |
| 拆表/并表 | 转换 |
| 加字段 | 补默认 |
| 编码转换 | 统一 |
六、场景设计题
Q17:业务库同步到数仓架构?
全量:DataX 初始化
增量:Canal/Debezium → Kafka → 数仓
实时:Flink CDC → 湖/数仓
监控:位点/延迟/对账Q18:同步延迟高怎么办?
1. 扩并发(Task/通道)
2. 批量写入
3. 检查瓶颈(源/网络/目标)
4. 分区优化
5. 监控定位Q19:同步数据不一致怎么排查?
1. 全量对账(行数/汇总)
2. 增量对账(条数)
3. 看位点延迟
4. 看脏数据
5. 修复重放Q20:大表初始化方案?
1. 分片并行(splitPk)
2. 增量快照(不阻塞)
3. 限流保护源库
4. 断点续传
5. 完成后校验七、高频易错点
| 易错点 | 正确理解 |
|---|---|
| CDC 一定实时 | 查询式有延迟 |
| 不丢 ≠ 不重 | 需幂等 |
| DataX 能实时 | 离线批量 |
| 快照一次性 | 增量快照分批 |
| 类型直接兼容 | 需映射 |
八、速答清单
| 高频题 | 一句话答案 |
|---|---|
| CDC 分类 | 查询 vs 日志 |
| 一致性 | 位点 + 幂等 |
| 断点续传 | 分片/位点 |
| Canal vs Debezium | 单库 vs 多库 |
| 全量+增量 | DataX + CDC |
| Flink CDC | 实时数仓 SQL |
| 异构映射 | 显式转换 |
| 延迟排查 | 定位瓶颈 |