1. 数据质量概述:什么是数据质量,为什么它如此重要

大家好,我是你们这门课的老朋友。咱们今天开篇,先聊聊一个看似基础、但实际坑最多的话题——数据质量。

说实话,我做了十几年数据架构,见过太多项目翻车。翻车的原因千奇百怪,但归根结底,八成以上都跟数据质量脱不了干系。你想想看,一个数据平台,架构再牛、技术再新,如果里面跑的数据是脏的、错的、缺的,那上层所有的报表、模型、AI应用,全成了空中楼阁。

所以,咱们第一节课,先把地基打牢。

1.1 到底什么是数据质量?

数据质量,说白了就是数据满足使用需求的程度。它不是一句空话,而是有具体维度的。我个人习惯用六个维度来衡量:

维度 定义 举个栗子
完整性 数据有没有缺失?该有的字段是不是都有值? 用户表的手机号字段,不能有30%是空的
准确性 数据跟真实世界是否一致? 订单金额是100元,数据库里存的也是100元
一致性 不同系统、不同时间点的数据是否对得上? CRM里的客户等级和数仓里的客户等级,定义得一样
及时性 数据从产生到可用,延迟是否在可接受范围内? 实时风控要求秒级,离线报表可以接受T+1
唯一性 有没有重复记录? 同一个用户ID不能出现两条
有效性 数据是否符合业务规则和格式要求? 邮箱字段必须包含@符号

核心观点:数据质量不是的“好”或“坏”,而是看它能不能支撑你的业务场景。一个数据,对A部门是垃圾,对B部门可能就是宝贝。

1.2 数据质量为什么重要?

这个问题,我每次跟业务方聊的时候都会问他们:你信不信你报表上的数字?

如果数据质量不行,后果很直接:

  • 决策失误: 我见过一家电商公司,因为订单数据重复,把GMV算高了20%,结果备货备多了,库存积压了整整一个季度。
  • 成本浪费: 数据管道下游的ETL、模型训练,全是在垃圾数据上跑。跑得越快,错得越离谱。我曾经帮一个客户排查,发现他们70%的计算资源都在处理无效数据。
  • 信任崩塌: 这是最可怕的。一旦业务方发现数据不准,他们就不再信任数据平台。以后你出什么报表,他们都要手动核对一遍。数据团队的价值,瞬间归零。

避坑指南: 我曾经接手过一个项目,前期只顾着搭架构,没管数据质量。结果上线第一天,实时大屏上的数字就飘红了。业务老大当场拍桌子,整个团队加班三天三夜才把数据洗回来。从那以后,我所有项目的第一条原则就是:质量先行。

1.3 流批一体架构下的数据质量挑战

好了,前面说的都是通用问题。现在咱们进入正题——流批一体。

流批一体,顾名思义,就是一套架构同时处理实时流数据和离线批数据。听起来很美,对吧?但实际做起来,数据质量的挑战比传统架构大了不止一个量级。

为什么会这样?我总结了几个核心痛点:

  1. 双链路一致性问题: 流处理走一条路,批处理走另一条路。两条路算出来的结果,能不能对得上?我见过最典型的情况是:实时看板显示今日成交100万,离线报表显示80万。差了20万,业务方该信谁?
  2. 数据延迟与乱序: 流数据是源源不断进来的,但网络抖动、系统故障会导致数据迟到。批处理可以等,流处理不能等。怎么处理这些“迟到”的数据?处理不好,数据就全乱了。
  3. 状态一致性与容错: 流处理是有状态的。比如实时统计用户点击次数,状态存在内存里。一旦任务挂了重启,状态能不能恢复?恢复之后跟批处理的结果还能不能对上?
  4. Schema演化: 业务是活的,数据格式会变。今天加个字段,明天改个类型。流批一体架构下,怎么保证Schema变更不影响数据质量?
  5. 监控与告警的复杂性: 传统架构,监控批任务就行。流批一体,既要监控批,又要监控流,还要监控两条链路的对账结果。告警阈值怎么设?误报多了没人看,漏报了又出大事。

嗯,这里要注意,这些挑战不是孤立的。它们互相影响,一个没处理好,就会引发连锁反应。

为了让大家更直观地理解,我画了一张图,展示流批一体架构下数据质量的核心挑战和它们之间的关系:

流批一体架构数据质量核心挑战 数据质量保障 双链路一致性 流 vs 批 结果对账 数据延迟与乱序 Watermark & 迟到处理 状态一致性与容错 Exactly-Once语义 Schema演化 兼容性与版本管理 监控与告警 多链路 & 对账监控 💡 核心洞察 这五个挑战相互关联,一个没处理好就会引发连锁反应。 后续课程我们将逐一攻克。

我的经验: 刚开始做流批一体的时候,我天真地以为只要把Flink和Spark SQL拼在一起就行了。结果第一次对账,差了5%。查了三天,发现是流处理里的迟到数据没处理好,而批处理里这些数据又算了一遍。从那以后,我养成了一个习惯:任何流批一体项目,第一件事就是定义清楚“对账口径”。