何为流计算?
批计算是已经存在一堆数据,需要用一次计算把这堆数据处理完。而流计算是有一个源源不断的源头,是一个为了无止境的数据集设计的计算框架。
批计算处理的是有界的数据集,而流计算处理的是一个近似无界的数据集。
批计算更关注的是吞吐量,而流计算更关注的是低延时。
流计算还有个特性,就是增量性,数据源源不断的流入,对计算结果进行增量的更新,这给状态的容错带来了很大的复杂性(Exactly-Once)。
Lambda架构
Lambda架构是由Storm的作者Nathan Marz提出的一个实时大数据处理框架。Lambda架构整合离线计算和实时计算,融合不可变性(Immunability),读写分离和复杂性隔离等一系列架构原则。
Lambda架构分为三层,Speed Layer(对应Storm)、Batch Layer(Hadoop)、查询层(使用KV存储)。
Speed Layer处理的数据是最近的增量数据流,Batch Layer处理的全体数据集。
Speed Layer为了效率,接收到新数据时不断更新Realtime View,而Batch Layer根据全体离线数据集直接得到Batch View。
Lambda架构将数据处理分解为Batch Layer和Speed Layer有如下优点(来自引用1):
容错性。Speed Layer中处理的数据也不断写入Batch Layer,当Batch Layer中重新计算的数据集包含Speed Layer处理的数据集后,当前的Realtime View就可以丢弃,这也就意味着Speed Layer处理中引入的错误,在Batch Layer重新计算时都可以得到修正。这点也可以看