lambda架构从这点出发, 有两套解决办法, 正如图上的两条分支, 一条叫Speed Layer 顾名思义 快速的处理实时数据以供查询, 而另一条分支, 又分作两层(Batch Layer & Serving Layer) 处理那些对时效性要求不高的数据。
Speed Layer处理实时数据 代价是对计算资源要求很高, 而且逻辑复杂度也会很高, 通常采用的技术比如Redis,Storm,Kafka,Spark Streaming等。而另外两层使用的典型技术比如MR或Spark,Hive。这条路线处理延迟比较大, 结果逻辑相对简单,往往把它的处理叫做“离线处理”, 与Speed Layer的“实时处理”相对应。这种设计被称作:Complexity Isolation(复杂度分离)。
两者其实是相辅相成的, Batch Layer会持续地吸收增量数据加以处理(比如渐变维度,增加索引,划分分区,预计算聚合值等操作), 当新增数据被Batch Layer处理完成后, 它们的分析就不再由Speed Layer处理了(交由Serving Layer处理),所以保证了Speed Layer处理的历史数据量永远不会太大,毕竟对于Speed Layer来说 “快” 是关键。