Lambda架构采用三层设计(批处理层、速度层和服务层),通过分离批处理与实时处理实现高准确性但系统复杂度高;Kappa架构则简化为两层(流处理层和服务层),将所有数据(包括历史数据)统一作为流处理,通过重放事件日志简化维护,但要求数据处理逻辑保持一致,适用于实时性要求高且算法简单的场景。

Lambda架构的三层分层

Lambda架构由Nathan Marz提出,是一种经典的流批分离架构,分为以下三层:

  1. 批处理层 (Batch Layer)

    • 核心功能:存储原始数据集,处理全量数据,生成Batch View(批处理视图)
    • 处理特点:高准确性但延迟高(通常数小时)
    • 典型技术:Hadoop MapReduce、Spark Batch、Hive
    • 存储:HDFS、S3等分布式存储系统
  2. 速度层 (Speed Layer) / 实时层 (Stream Layer)

    • 核心功能:处理实时数据流,生成实时视图(Real-time View)
    • 处理特点:低延迟(秒级或分钟级),但准确性可能受限
    • 典型技术:Apache Storm、Spark Streaming、Flink
    • 存储:HBase、Cassandra、NoSQL数据库
  3. 服务层 (Serving Layer)

    • 核心功能:合并批处理层和速度层的结果,提供统一的查询接口
    • 处理特点:为用户提供最终的、一致的数据视图
    • 典型技术:HBase、Cassandra、Solr、Elasticsearch、Impala

Kappa架构的两层分层

Kappa架构由LinkedIn工程师Jay Kreps提出,作为Lambda架构的简化替代方案,分为以下两层:

  1. 流处理层 (Stream Processing Layer)

    • 核心功能:处理所有数据(包括历史数据和实时数据),通过重放事件日志实现历史数据的重新处理
    • 处理特点:将批处理和实时处理合并为单一处理流程
    • 典型技术:Apache Flink、Apache Samza
    • 存储:Kafka、S3、GCS等分布式存储系统
  2. 服务层 (Serving Layer)

    • 核心功能:提供查询接口,展示处理后的结果
    • 处理特点:与Lambda架构的服务层功能类似,但所有数据处理都在流处理层完成
    • 典型技术:与Lambda架构类似,HBase、Cassandra等

Lambda与Kappa架构分层对比

特征Lambda架构Kappa架构
分层数量三层两层
核心理念"批流双管道",分离处理"所有数据作为流",统一处理
历史数据处理批处理层专门处理历史数据历史数据被视为流中较老的数据,与实时数据统一处理
代码复用需维护两套处理逻辑(批处理和实时)仅需一套处理逻辑,简化维护
数据一致性需合并批处理和实时结果,可能有不一致统一处理,数据一致性更好
系统复杂性较高(需维护两套系统)较低(仅需维护一套系统)
数据重放需要专门的批处理流程通过重放Kafka中的数据实现
典型应用场景历史数据量大、实时性要求高实时性要求高、数据处理逻辑简单

选择建议

  • 如果用于历史数据和实时数据的算法是相同的,通常最好使用Kappa方法
  • 如果批处理系统和实时系统的输出由于计算依据的数据量不同而在准确度上有所不同,Lambda架构可能更适合
  • 如果批处理算法在处理吞吐量方面优于实时算法,需要权衡选择Lambda(倾向批处理性能)还是Kappa(倾向代码简单性)

Kappa架构通过简化架构,减少了开发、测试和运维的复杂性,但需要处理历史数据重放的挑战。Lambda架构虽然更复杂,但在处理超大规模历史数据时仍具有优势。