Kappa 与 Lambda 架构介绍与对比
Lambda 架构
Lambda架构源自Storm的作者Nathan Marz提出,旨在提供一种满足现代大数据系统关键特性的架构方案,这些关键特性包括高容错性、低延迟性和可扩展性等核心要素.该架构通过整合离线与实时计算过程,融合了不可变性原则以及读写分离原则,同时实现了复杂性的孤立管理.此外,该框架还具备良好的兼容性和扩展能力,能够集成Hadoop生态系统中的多种组件如HDFS和HBase,同时也支持Kafka的消息生产者机制以及Storm的任务调度功能.

Lambda 架构可分解为三层:
- BATCH LAYER: 该批次使用批处理机制来管理非实时数据。
- REAL-TIME LAYER: 该实时层采用在线计算引擎来管理不断更新的数据流。
- SERVING LAYER: 整合层将BATCH LAYER和REAL-TIME LAYE的综合结果集合进行汇总,并支持查询功能。
Kappa 架构
Lambda 架构的一个显著问题是需要管理和维护两套分别部署于批处理计算系统和实时计算系统上的代码,并且这两套代码必须产生完全一致的结果。Kappa架构的核心理念主要围绕三个核心概念展开探讨:
- 采用类似于Kafka或其他分布式队列系统的架构来存储数据,在这种架构下, 所需的数据量决定了存储的时间
- 当需要全量重新计算时, 重新启动一个流计算实例, 并从初始状态重新解析数据, 最后将处理结果存入新的结果存储中
- 当新实例完成任务后立即关闭旧的流计算实例, 并删除不再需要的老结果

两种架构比较
| 对比项 | Lambda 架构 | Kappa 架构 |
|---|---|---|
| 数据处理能力 | 可以处理大规模的历史数据 | 历史数据处理的能力有限 |
| 机器开销 | 批处理和实时计算需一直运行,机器开销大 | 必要时进行全量计算,机器开销相对较小 |
| 存储开销 | 只需要保存一份查询结果,开销较小 | 需要存储新老实例结果,存储开销相对较大 |
| 开发、测试难度 | 实现两套代码,开发、测试难度较大 | 只需面对一个框架,开发、测试难度相对较小 |
| 运维成本 | 维护两套系统,运维成本大 | 只需维护一个框架,运维成本小 |
