1. 流批一体概述:从Lambda架构到Kappa架构的演进

大家好,我是这次课程的主讲。咱们直接进入正题——流批一体。

先问个问题:你手头的实时数仓,是不是还跑着两套代码?一套离线批处理,一套实时流处理?维护起来是不是特别痛苦?

嗯,我经历过。2018年我刚接手一个电商大促项目,离线ETL用Hive,实时用Spark Streaming。两套逻辑,两套调度,两套运维。每次改业务口径,两边都得改,还经常对不上数。那段时间,我做梦都在对账。

所以,流批一体的出现,说白了就是来解决这个问题的。

1.1 Lambda架构:曾经的“标准答案”

先聊聊Lambda架构。它把数据处理分成了三层:

  • 批处理层:处理全量历史数据,保证准确性
  • 流处理层:处理实时增量数据,保证低延迟
  • 服务层:合并两边的结果,对外提供服务

听起来很完美对吧?但实际跑起来,坑不少。

我曾经踩过的坑:有一次离线批处理跑完了,实时流还在处理。服务层合并时,同一笔订单在批处理层和流处理层各算了一次。结果报表上GMV翻了一倍。老板问我是不是大促效果太好,我都不敢吭声。

Lambda架构的核心问题在于:

  • 两套代码:批处理和流处理逻辑必须分别实现
  • 数据对账难:批和流的结果经常不一致
  • 运维成本高:两套集群、两套调度、两套监控

你想想看,一个团队同时维护两套技术栈,光是沟通成本就够受的。

1.2 Kappa架构:简化,再简化

后来,LinkedIn的Jay Kreps提出了Kappa架构。核心思想很简单:只用一套流处理引擎,搞定所有事情。

怎么做到的?

  • 所有数据都当作流来处理
  • 历史数据通过“重放”的方式重新处理
  • 不再区分批和流,统一用一套代码

我个人习惯把Kappa架构理解为“流处理的一统天下”。你不需要再纠结“这个逻辑放批处理还是流处理”,所有逻辑都写在流作业里。

核心价值:Kappa架构让“流批一体”从概念变成了可能。你只需要维护一套代码、一套引擎、一套运维体系。

但Kappa架构也不是银弹。我遇到过的问题是:

  • 状态管理复杂:长时间运行的流作业,状态越来越大
  • 重放效率:重新处理TB级历史数据,耗时可能比批处理还长
  • Exactly-Once语义:实现起来比想象中难

1.3 流批一体的核心价值

说了这么多,流批一体到底能带来什么?我总结了几点:

价值点 说明
统一开发 一套代码搞定批和流,开发效率翻倍
统一运维 一套集群、一套监控、一套调度
数据一致性 批和流共用同一套逻辑,结果天然对齐
成本降低 减少重复计算,降低存储和计算资源消耗
架构简化 从Lambda的三层变成Kappa的一层

说白了,流批一体就是让你用更少的资源,做更多的事。

1.4 流批一体的挑战

但别高兴太早。我做了几个流批一体项目后,发现挑战也不少:

  • 技术选型:Flink、Spark、Kafka Streams,选哪个?各有优劣
  • 语义保证:Exactly-Once在分布式环境下很难完美实现
  • 状态管理:大状态作业的调优和容灾
  • 数据延迟:流处理对延迟敏感,批处理对吞吐敏感,如何平衡?
  • 历史数据回溯:重放TB级数据时,性能和稳定性都是考验

我的建议:不要一上来就追求“纯Kappa”。很多场景下,Lambda + 统一代码框架(比如Flink SQL)反而是更务实的选择。先跑通,再优化。

1.5 架构演进全景图

下面这张图,是我自己画的Lambda到Kappa的演进路线。你可以直观地看到两者的区别。

Lambda → Kappa 架构演进 Lambda 架构 数据源 批处理层 流处理层 服务层 Kappa 架构 数据源 统一流处理引擎 结果存储 关键差异: • Lambda:批+流两套引擎,服务层合并结果,代码维护成本高 • Kappa:统一流引擎,历史数据通过重放处理,架构更简洁 • 流批一体:本质是让批处理成为流处理的一种特殊形式

1.6 我的选择建议

最后,说说我个人在实际项目中的选择逻辑:

  1. 团队技术栈:如果团队熟悉Flink,优先选Flink SQL做流批一体
  2. 数据规模:TB级以下,Kappa架构完全够用;PB级以上,考虑Lambda + 统一代码
  3. 延迟要求:秒级延迟必须上流处理;分钟级延迟,微批处理也能接受
  4. 成本敏感:流批一体能节省30%-50%的开发和运维成本

一句话总结:流批一体不是银弹,但它确实是当前大数据架构演进的主流方向。选对技术、做好权衡,你就能在成本和效率之间找到最佳平衡点。