大数据 -- Kappa架构

Lambda架构

  1. Lambda架构结合了批处理流处理的架构思想
    • 将进入系统的大规模数据同时送入两套架构中,分别是批处理层速度层,同时产生两套数据结果并存入服务层
  2. 批处理层有很好的容错性,同时因为保存着所有的历史记录,使得产生的数据具有很好的准确性
  3. 速度层可以及时地处理流入的数据,因此具有低延迟性
  4. 最终服务层将这两套数据结合,并生成一个完整的数据视图
  5. Lambda架构具有很好的灵活性,但维护很复杂
    • 因为需要维护两个复杂的分布式系统,并且保证它们在逻辑上产生相同的结果输出到服务层中
      • 可以部署Apache Hadoop到批处理层上,同时部署Apache Flink到速度层上
    • 在分布式框架中进行编程是十分复杂的,尤其还会针对不同的框架进行专门的优化
  6. 改进方向
    • 改进批处理层的系统,让它具有更低的延时性
    • 改进速度层的系统,让它产生的数据视图更具准确性和更接近历史数据

Kappa架构

  1. Kappa架构是由前LinkedIn的前首席工程师Jay Kreps提出来的一种架构思想
    • Jay Kreps是Apache Kafka和Apache Samza的作者之一,也是Confluent公司的CEO
  2. Jay Kreps提出了一个改进Lambda架构的观点
    • 改进速度层的系统性能,使得它可以处理好数据的完整性准确性问题
    • 改进速度层,使它既能进行实时数据处理,也能在业务逻辑更新的情况下重新处理以前处理过的历史数据

Apache Kafka

  1. 部署Apache Kafka,并设置数据日志的保留期
    • 保留期:你希望能够重新处理的历史数据的时间区间
  2. 如果需要改进现有的逻辑算法,那就表示需要对历史数据进行重新处理,处理措施如下
    • 重新启动一个Kafka作业实例,该实例将重头开始,重新计算保留好的历史数据,并将结果输出到一个新的数据视图中
    • Apache Kafka的底层是使用Log Offset来判断现在已经处理到了哪个数据块
      • 因此只需要将Log Offset置为0,新的作业实例就会重头开始处理历史数据
  3. 当新的数据视图处理过的数据进度赶上旧的数据视图时,应用可以切换到从新的数据视图中读取数据
  4. 停止旧版本的作业实例,并删除旧的数据视图
    • 也可以不删除旧的数据视图,出错时可以回滚或者做AB测试

优缺点

  1. Kappa架构只保留了速度层,只需在业务逻辑变更或者代码更改时进行数据的重新处理
  2. Kappa架构缺少了批处理层,在速度层上处理大规模数据可能会有数据更新出错的情况,需要花费更多的时间在异常处理
  3. Kappa架构的批处理和流处理都放在了速度层,因此不适用于批处理和流处理代码逻辑不一致的场景

应用场景

  1. Lambda架构
    • 设计一种稳健的机器学习模型来预测即将发生的事情,应该优先考虑使用Lambda架构
    • 因为Lambda架构拥有批处理层和速度层来确保更少的错误
  2. Kappa架构
    • 客户端需要根据运行时发生的实时事件来做出响应,应该优先考虑Kappa架构
0%