数据延迟排查
场景描述
早上 9 点了,昨天的日报数据还没好,业务方催促"数据什么时候能看到?"
数据延迟分类
| 类型 | 表现 | 典型原因 |
|---|---|---|
| 离线延迟 | T+1 任务未按时完成 | 上游任务失败、资源不足 |
| 实时延迟 | 实时看板数据滞后 | Kafka 消费延迟、Flink 背压 |
| 同步延迟 | 数据库同步到数仓滞后 | CDC 链路故障、binlog 堆积 |
离线数据延迟排查
排查步骤
- 查调度平台(Airflow / DolphinScheduler):哪个 DAG 失败或未触发?
- 查任务链路:当前任务的上游依赖是否都完成?
- 查日志:失败任务的错误日志(OOM、SQL 语法错误、分区不存在)
- 查资源:集群 CPU / 内存使用率是否已满
-- 查看任务调度状态
SELECT task_name, status, start_time, end_time,
TIMESTAMPDIFF(MINUTE, start_time, end_time) AS duration_min
FROM scheduler_task_log
WHERE dt = CURRENT_DATE AND status != 'SUCCESS'
ORDER BY start_time;
实时数据延迟排查
Kafka 消费延迟
# 查看 Consumer Group lag
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
--describe --group flink-consumer
# 输出:TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG
# 当 LAG 持续增长,说明消费速度跟不上生产速度
Flink 背压排查
- Flink Web UI:查看 Task 的 backPressure 状态(OK / LOW / HIGH)
- HIGH 背压原因:下游算子处理能力不足、外部系统(数据库/ES)写入慢
应急处理
| 场景 | 应急措施 |
|---|---|
| 上游任务失败 | 修复问题后重跑,通知下游等待 |
| 资源不足 | 扩容或调整队列优先级 |
| 数据倾斜 | 临时加 Salting Key 或过滤倾斜 Key |
| 实时 lag 过大 | 增加 Flink 并行度或 Kafka 分区 |
常见面试问题
Q1: 如何降低离线数据延迟?
答案:
- 数据分层:核心报表依赖的 DWS 层任务优先调度
- 增量处理:从全量扫描改为增量处理(只处理新增数据)
- 资源保障:核心任务分配独立资源队列
- SLA 监控:设置数据就绪 SLA,超时自动告警
Q2: 实时和 T+1 数据不一致怎么办?
答案:
实时和离线数据不一致是常见问题,根本原因是两条链路独立处理同一份数据:
- 短期:以离线数据为准(更完整可靠),实时数据标注"近似值"
- 长期:推动流批一体架构(如 Apache Paimon),统一处理逻辑
相关链接
- Airflow - 调度引擎
- Flink - 实时计算引擎
- CDC 变更数据捕获 - 数据同步链路
- 离线 vs 实时数仓 - 架构对比