1. 流批一体概述:概念、为什么需要、架构对比

大家好,我是老张。做数据质量这行十几年了,今天咱们聊聊流批一体。

说实话,我第一次听到「流批一体」这个词,是在2019年的一次技术大会上。当时台下很多人跟我一样,第一反应是:这不就是Lambda架构换个马甲吗?后来踩了不少坑,才明白——嗯,还真不是一回事。

1.1 流批一体到底是什么?

流批一体,说白了就是一套代码、一套引擎、一套元数据,同时搞定实时流处理和离线批处理。

传统做法是两套系统:

  • 批处理用 Hive/Spark SQL,跑 T+1 离线任务
  • 流处理用 Flink/Storm,跑秒级实时任务

两套代码,两套运维,两套口径。你想想看,光是对齐指标定义就能让人崩溃。

流批一体的核心思想是:流就是批的无限版本,批就是流的有界快照。同一份数据,同一套逻辑,既可以在离线场景下全量重跑,也可以在实时场景下增量计算。

核心要点:流批一体不是简单的「流+批」拼凑,而是从计算引擎、存储格式、元数据管理到数据质量检测,全链路统一。

1.2 为什么我们需要流批一体?

我在项目中遇到过最典型的一个场景:某电商大促期间,实时大屏显示 GMV 是 10 亿,第二天离线报表出来却是 9.2 亿。差了 8000 万!业务方直接炸了。

排查下来原因很简单:实时和离线用了两套 ETL 逻辑,对「有效订单」的定义不一致。实时为了性能砍掉了一些复杂过滤,离线则严格按照业务口径来。

这就是典型的「数据口径二义性」问题。流批一体要解决的就是这类痛点:

  1. 口径统一:同一套 SQL/代码,实时和离线结果天然对齐
  2. 运维简化:一套集群、一套监控、一套告警,不用维护两套技术栈
  3. 成本降低:存储层面共用同一份数据,避免批流两份冗余
  4. 时效性灵活:同一套逻辑可以按需切换实时/准实时/离线模式

我的建议:如果你的团队还在用两套引擎维护同一套指标,而且每个月至少因为口径不一致出一次故障——别犹豫,流批一体是你绕不开的路。

1.3 流批一体 vs Lambda 架构 vs Kappa 架构

聊架构对比之前,我先画一张图,帮大家理清这三者的关系。

三种架构对比:Lambda vs Kappa vs 流批一体 Lambda 架构 批处理层 流处理层 合并服务层(Merge) 两套代码 · 两套引擎 · 口径难对齐 Kappa 架构 统一流处理层(Kafka + Flink) 实时输出 重放批处理 一套引擎 · 重放实现批 · 存储成本高 流批一体 统一引擎 + 统一存储 + 统一元数据 批模式 流模式 增量模式 一套代码 · 三种模式 · 口径天然一致 核心差异:Lambda 用两套代码保证时效性,Kappa 用重放牺牲存储,流批一体从引擎层面统一计算模型 详细对比 维度 Lambda Kappa 流批一体 代码复用 低 中 高 运维复杂度 高 中 低 口径一致性 差 中 好

1.4 三种架构的深度对比

上面这张图基本把三者的骨架画清楚了。下面我展开聊聊每个架构的优缺点,以及我个人的实战体会。

Lambda 架构

这是最「古老」也最「成熟」的方案。批处理层负责全量计算,流处理层负责增量计算,最后通过合并服务层把两路结果拼起来。

我曾经在一个金融项目里用过 Lambda 架构。批处理用 Hive,流处理用 Flink,合并层用自研的 Merge Service。结果呢?每次上线都要对齐两套代码的语义,光 UDF 行为不一致就修了三个月。

避坑指南:我曾经见过一个团队,Lambda 架构跑了两年,批流口径差异累计超过 200 个。最后不得不花一个季度做数据回溯——代价太大了。如果你选 Lambda,一定要在合并层做严格的数据质量校验。

Kappa 架构

Kappa 架构的思路很纯粹:所有数据都走流处理,批处理通过「重放历史数据」来实现。这样只用维护一套流引擎。

听起来很美,对吧?但我在实践中发现几个问题:

  • 历史数据重放需要大量 Kafka 存储,成本飙升
  • 流引擎的 Exactly-Once 语义在重放场景下很难保证
  • 全量回溯时,流处理性能远不如批处理

说白了,Kappa 更适合数据量可控、历史回溯频率低的场景。如果你每天要跑全量重算,Kappa 会让你很痛苦。

流批一体

流批一体不是简单的架构选型,而是计算范式的升级。以 Flink 为例,它从 1.12 开始正式支持流批一体:同一套 Table API/SQL,Batch 模式和 Streaming 模式可以无缝切换。

我去年主导的一个数据质量平台,就是用 Flink 流批一体做的。核心收益有三点:

  1. 质量规则一次定义:实时规则和离线规则共用同一套 DQC 配置
  2. 结果自动对齐:实时产出和离线产出天然一致,不再需要人工核对
  3. 资源弹性调度:白天跑实时任务,凌晨自动切批模式做全量回溯

关键认知:流批一体不是银弹。如果你的业务场景实时性要求不高(分钟级即可),或者历史数据量极大(PB 级),Lambda 架构可能更务实。选型要看场景,不要追概念。

1.5 流批一体在数据质量领域的价值

回到咱们课程的主题——质量检测体系。流批一体对数据质量意味着什么?

质量维度 传统批流分离 流批一体
完整性检测 离线 T+1 发现缺失,修复滞后 24h 实时检测 + 离线回溯,分钟级发现
准确性检测 两套口径,结果经常打架 同一套规则,结果天然一致
及时性检测 只能监控离线链路延迟 实时链路延迟 + 离线链路延迟统一监控
一致性检测 需要额外开发批流比对工具 引擎层面保证,无需额外开发

举个例子。我之前做实时数仓质量检测,每天凌晨要跑一个批流比对任务,把昨天的实时聚合结果和离线结果做差值分析。如果差异超过阈值就告警。这个任务本身就要维护一套复杂的比对逻辑。

用了流批一体之后,这个问题自然消失了——因为实时和离线用的是同一套聚合逻辑,结果不可能不一致。你想想看,这省了多少事?

个人经验:我建议刚开始接触流批一体的团队,先从「质量检测」这个场景切入。因为质量检测对实时性要求没那么苛刻(秒级延迟可以接受),但对口径一致性要求极高——这正是流批一体的强项。

1.6 小结

这一章我们聊了流批一体的核心概念、为什么需要它,以及它与 Lambda、Kappa 架构的对比。说白了,流批一体不是要取代谁,而是在特定场景下提供更优的解法。

记住三个关键点:

  • 流批一体的本质是计算模型统一,不是简单的工具拼凑
  • 选型要看业务场景,Lambda 和 Kappa 在特定场景下依然有优势
  • 数据质量是流批一体落地的最佳切入点之一