跳到主要内容

数据延迟排查

场景描述

早上 9 点了,昨天的日报数据还没好,业务方催促"数据什么时候能看到?"

数据延迟分类

类型表现典型原因
离线延迟T+1 任务未按时完成上游任务失败、资源不足
实时延迟实时看板数据滞后Kafka 消费延迟、Flink 背压
同步延迟数据库同步到数仓滞后CDC 链路故障、binlog 堆积

离线数据延迟排查

排查步骤

  1. 查调度平台(Airflow / DolphinScheduler):哪个 DAG 失败或未触发?
  2. 查任务链路:当前任务的上游依赖是否都完成?
  3. 查日志:失败任务的错误日志(OOM、SQL 语法错误、分区不存在)
  4. 查资源:集群 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 Web UI:查看 Task 的 backPressure 状态(OK / LOW / HIGH)
  • HIGH 背压原因:下游算子处理能力不足、外部系统(数据库/ES)写入慢

应急处理

场景应急措施
上游任务失败修复问题后重跑,通知下游等待
资源不足扩容或调整队列优先级
数据倾斜临时加 Salting Key 或过滤倾斜 Key
实时 lag 过大增加 Flink 并行度或 Kafka 分区

常见面试问题

Q1: 如何降低离线数据延迟?

答案

  1. 数据分层:核心报表依赖的 DWS 层任务优先调度
  2. 增量处理:从全量扫描改为增量处理(只处理新增数据)
  3. 资源保障:核心任务分配独立资源队列
  4. SLA 监控:设置数据就绪 SLA,超时自动告警

Q2: 实时和 T+1 数据不一致怎么办?

答案

实时和离线数据不一致是常见问题,根本原因是两条链路独立处理同一份数据:

  • 短期:以离线数据为准(更完整可靠),实时数据标注"近似值"
  • 长期:推动流批一体架构(如 Apache Paimon),统一处理逻辑

相关链接