1. Lambda架构
- Lambda架构结合了批处理和流处理的架构思想:将进入系统的大规模数据同时送入两套架构中,分别是批处理层和速度层,同时产生两套数据结果并存入服务层
- 批处理层有很好的容错性,同时因为保存着所有的历史记录,使得产生的数据具有很好的准确性和容错性
- 速度层可以及时地处理流入的数据,因此具有低延迟性
- 最终服务层将这两套数据结合,并生成一个完整的数据视图
- Lambda架构具有很好的灵活性,但维护很复杂:
- 因为需要维护两个复杂的分布式系统,并且保证它们在逻辑上产生相同的结果输出到服务层中,可以部署Apache Hadoop到批处理层,同时部署Apache Flink到速度层上
- 在分布式框架中进行编程是十分复杂的,尤其还会针对不同的框架进行专门的优化 - 改进方向:
- 改进批处理层的系统,让它具有更低的延时性
- 改进速度层的系统,让它产生的数据视图更具准确性和更接近历史数据
2. Kappa架构
Kappa架构提出了一个改进Lambda架构的观点:
- 改进速度层的系统性能,使得它可以处理好数据的完整性和准确性问题
- 改进速度层,使它既能进行实时数据处理,也能在业务逻辑更新的情况下重新处理以前处理过的历史数据
部署Apache Kafka,并设置数据日志的保留期
如果需要改进现有的逻辑算法,那就表示需要对历史数据进行重新处理,处理措施如下
当新的数据视图处理过的数据进度赶上旧的数据视图时,应用可以切换到从新的数据视图中读取数据
停止旧版本的作业实例,并删除旧的数据视图,也可以不删除旧的数据视图,出错时可以回滚或者做AB测试。Kappa架构思想与Kafka有很多共同之处。
3. 优缺点
- Kappa架构只保留了速度层,只需在业务逻辑变更或者代码更改时进行数据的重新处理
- Kappa架构缺少了批处理层,在速度层上处理大规模数据可能会有数据更新出错的情况,需要花费更多的时间在异常处理上
- Kappa架构的批处理和流处理都放在了速度层,因此不适用于批处理和流处理代码逻辑不一致的场景
4. 应用场景
Lambda架构
- 设计一种稳健的机器学习模型来预测即将发生的事情,应该优先考虑使用Lambda架构
- 因为Lambda架构拥有批处理层和速度层来确保更少的错误
Kappa架构
- 客户端需要根据运行时发生的实时事件来做出响应,应该优先考虑Kappa架构