一、增量计算概述

大家好,我是这次课程的主讲。做了十几年大数据架构,我见过太多团队在数据计算上栽跟头。今天咱们先聊聊最基础的问题——什么是增量计算,以及它为什么值得你花时间了解。

1.1 什么是增量计算

增量计算,说白了就是只处理变化的那部分数据。

举个例子。你每天要统计全公司一万人的考勤。全量计算的做法是:每天凌晨把所有人的打卡记录重新算一遍。增量计算呢?只处理昨天到今天之间新增或修改的打卡记录,然后跟昨天的结果合并。

嗯,听起来很简单对吧?但实际落地时坑不少。我曾经在一个项目中,团队坚持用全量重算,结果数据量从 100 万涨到 1 亿,任务跑不完。后来改成增量,延迟从 6 小时降到 15 分钟。

核心定义:增量计算是一种只处理数据集中发生变化的部分(新增、更新、删除),并将结果与历史状态合并的计算模式。

1.2 增量计算 vs 全量计算

我习惯用一个表格来对比这两者的差异。你一看就明白。

对比维度 全量计算 增量计算
处理范围 每次处理全部数据 只处理变化的数据
计算延迟 通常较高(小时级) 低(秒级到分钟级)
资源消耗 高,随数据量线性增长 低,只与变化量相关
实现复杂度 简单,无状态 复杂,需维护状态
数据一致性 天然一致 需额外保证
适用场景 小数据量、离线报表 大数据量、实时场景

你想想看,如果你的数据量只有几千条,全量计算完全够用。但数据量一旦上了千万甚至亿级,全量重算的成本就变得不可接受了。

我的经验:选全量还是增量,先看数据量级。日增数据量超过全量的 10%,或者全量计算时间超过业务容忍延迟,就该考虑增量方案了。

1.3 增量计算的核心价值

为什么这几年增量计算这么火?三个字:快、省、准。

  • 快:只处理变化数据,延迟从小时级降到秒级。我在电商大促项目中,用增量计算把实时大屏的刷新延迟从 5 分钟压到了 10 秒以内。
  • 省:计算资源只消耗在变化的数据上。同样的集群,全量计算只能支撑 10 个任务,增量计算可以支撑 50 个。
  • 准:增量计算可以做到精确一次(Exactly-Once)语义,保证结果不丢不重。

但要注意,增量计算不是银弹。它需要你维护中间状态,处理乱序数据,还要应对数据回溯。这些坑,我后面会一个一个讲。

1.4 适用场景

我总结了几类最适合增量计算的场景:

  1. 实时数仓:比如 Flink 实时 ETL,只处理 CDC 变更数据。
  2. 指标聚合:比如实时 PV/UV、GMV 统计,每天只累加新数据。
  3. 特征工程:机器学习模型的在线特征计算,只更新变化特征。
  4. 数据同步:比如 MySQL 到 Hive 的增量同步,只同步 binlog。
  5. 流式关联:比如订单流和支付流的实时 Join,只处理新到达的事件。

避坑指南:我曾经在一个项目中,把增量计算用在了需要全量排序的场景上。结果增量结果和全量结果对不上,排查了三天才发现是排序语义的问题。记住:增量计算适合可加性和幂等性的操作,不适合需要全局视角的运算。

1.5 增量计算的核心逻辑

下面这张图展示了增量计算的基本流程。我建议你仔细看看,后面的章节都会围绕这个框架展开。

增量计算核心流程 数据源 MySQL / Kafka / 日志 变更捕获 CDC / 增量日志 增量计算引擎 Flink / Spark Streaming 状态存储 RocksDB / Redis / HBase 结果输出 Kafka / 数据库 / 大屏 关键说明: 1. 数据源产生变更事件(如 MySQL binlog、Kafka 消息) 2. 变更捕获模块识别并提取增量数据 3. 增量计算引擎结合历史状态执行计算 4. 更新后的状态持久化,结果输出到下游

这张图里,状态存储是增量计算的核心。没有状态,你就没法知道「增量」相对于什么。我见过不少团队,一开始没设计好状态管理,后面数据回溯时痛苦不堪。

1.6 本章小结

好了,这一章我们聊了增量计算的基本概念。记住三个要点:

  • 增量计算只处理变化的数据,不是全量重算
  • 它的核心价值是快、省、准,但实现复杂度更高
  • 状态管理是增量计算的灵魂,选型时要重点考虑