订阅更新

Flink作业上线后指标不对——怎么做实时数据质量监控?

Flink手册 第 18 题 约 3 分钟读完

本文目录
  1. 先说结论
  2. 四个监控维度
  3. 实现方案:在Flink作业内部做监控
  4. 实战经验:上游偷偷加了字段导致数据丢失
  5. 总结

先说结论

实时数据质量监控的核心是:在Flink作业内部或下游做检查,发现异常立即告警。检查四个维度:完整性、准确性、一致性、及时性。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

实时数据质量监控是实时数仓的“最后一公里”。作业跑起来了,但数据对不对?很多团队只关注“作业能不能跑”,不关注“数据对不对”。我做了9年数据开发,最痛苦的教训就是:数据质量问题往往在上线几天后才被发现,此时已经影响了业务决策。

四个监控维度

维度检查内容检查方法告警阈值
完整性数据量是否正常分钟级输入输出比对波动超过30%
准确性NULL率、异常值比例每批数据统计NULL比例NULL率超过5%
一致性实时指标和离线的偏差定时对账作业偏差超过1%
及时性数据延迟Watermark延迟监控延迟超过5分钟

实现方案:在Flink作业内部做监控

// 在Flink作业里加一个监控算子
stream
.process(new ProcessFunction<Event, Event>() {
private transient Counter totalCount;
private transient Counter nullCount;
 
@Override
public void open(Configuration params) {
// 注册Flink Metrics,可以被Prometheus采集
totalCount = getRuntimeContext().getMetricGroup()
.counter("total_events");
nullCount = getRuntimeContext().getMetricGroup()
.counter("null_user_id_events");
    }
 
@Override
public void processElement(Event e, Context ctx, Collector<Event> out) {
totalCount.inc();
if (e.getUserId() == null) {
nullCount.inc();  // 统计NULL率
      }
out.collect(e);
    }
})

通过Flink Metrics + Prometheus + Grafana的组合,可以实时监控NULL率、输入输出比、延迟等指标,异常时自动告警。

实战经验:上游偷偷加了字段导致数据丢失

我在元宇宙社交App遇到过一次事故:上游客户端更新了埋点格式,加了一个新字段,导致JSON反序列化失败,整个流的数据都丢了。但我们没有监控输入量的变化,过3天后业务方发现报表数据异常才告警。

从那以后我的规矩:

  1. 每个Flink作业必须有输入输出量的分钟级监控
  2. JSON解析必须加json.ignore-parse-errors=true容错,解析失败的数据输出到侧输出而不是直接丢弃
  3. 解析失败率超过1%立即告警

总结

实时数据质量监控4个维度:完整性、准确性、一致性、及时性。通过Flink Metrics + Prometheus + Grafana实现自动监控和告警。面试时能说清楚4个监控维度和具体实现方案,再加一个“上游改格式导致数据丢失3天才发现”的踩坑,就很有深度。

下一篇聊Flink SQL的新语法——窗口TVF比旧语法好在哪里?为什么新项目应该用TVF?

你们生产环境有实时数据质量监控吗?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器