实时与离线采集
问题
实时采集和离线采集有什么区别?分别在什么场景使用?
答案
核心对比
| 维度 | 实时采集 | 离线采集 |
|---|---|---|
| 延迟 | 秒级 ~ 分钟级 | 小时级 ~ T+1 |
| 技术 | Kafka + Flink | Sqoop / DataX / CDC |
| 成本 | 高(常驻资源) | 低(定时启动) |
| 数据质量 | 可能重复/乱序 | 批量处理,质量可控 |
| 适用 | 实时监控、实时推荐 | 离线报表、数据仓库 |
架构对比
如何选择
| 场景 | 选择 | 原因 |
|---|---|---|
| 实时大屏/监控 | 实时 | 秒级刷新 |
| 风控/反欺诈 | 实时 | 毫秒决策 |
| 每日运营报表 | 离线 | T+1 即可 |
| 数仓 DWD 建设 | 离线优先,关键表实时 | 成本与时效平衡 |
| 推荐系统 | 离线 + 实时 | 离线训练模型,实时更新特征 |
趋势:流批一体
- Flink SQL 既能处理实时流,也能处理离线批
- 同一套 SQL 复用,减少维护成本
- 实时+离线用同一套逻辑产出数据,保证一致性
常见面试问题
Q1: 实时数据如何保证不丢不重?
答案:
- 不丢:Kafka 副本机制 + acks=all
- 不重:Flink Exactly-Once + 下游幂等写入
- 实践中:at-least-once + 下游去重(成本更低)
Q2: 实时和离线数据不一致怎么办?
答案:
- 设计对数机制:定期比对实时和离线结果
- 以离线数据为准(离线处理更完整、更准确)
- 实时层作为快照,离线层作为最终事实
相关链接
- 离线数仓 vs 实时数仓 - Lambda/Kappa 架构
- CDC 变更数据捕获 - 实时同步数据库变更