1.Lambda 架构
Lambda 设计目的在于提供一个能满足大数据系统关键特性的架构,包括高容错、低延迟、可扩展等。其整合离线计算与实时计算,融合不可变性、读写分离和复杂性隔离等原则,可集成Hadoop, Kafka, Spark,Storm等各类大数据组件。
架构可分解为三层Layer,即Batch Layer, Real-Time(Speed) Layer和Serving Layer。
- Batch Layer : 存储数据集,在数据集上预先计算查询函数,并构建查询所对应的View,Batch Layer可以很好的处理离线数据。
- Speed Layer : 处理的是最近的增量数据流。为了效率,在接收到新的数据后会不断更新Real-time View
- Serving Layer : Serving Layer用于合并Batch View和Real-time View中的结果数据集到最终数据集
一个典型的Lamba技术架构如下
2.Kappa 架构
为什么我们不能改进流计算系统让它能处理这些问题?为什么不能让流系统来解决数据全量处理的问题?流计算天然的分布式特性注定其扩展性比较好,能否加大并发量来处理海量的历史数据?基于种种问题的考虑,Jay提出了Kappa这种替代方案。
利用流计算系统对全量数据进行重新计算,步骤如下:
1、用Kafka或类似的分布式队列保存数据,需要几天数据量就保存几天。
2、当需要全量计算时,重新起一个流计算实例,从头开始读取数据进行处理,并输出到一个结果存储中。
3、当新的实例完成后,停止老的流计算实例,并把老的一引起结果删除。
一个典型的Kappa架构如下,
3.应用场景
a.Kappa架构
场景1:基于StreamSQL引擎的智慧交通,实时监控和预警;
场景2:数据量不够TB级别,但是传统关系型查询又不能满足要求;
b.Lamdba架构。
场景1:海量数据分析,需要长时间批处理计算并且有实时计算的场景。
场景2:保留传统数据仓库的最佳实践,又需要批处理和实时处理的业务场景