Spark Streaming共有三种运用场景,分为:无状态操作、状态操作、window操作。下面分别描述下本人对这三种运用场景的理解。
1、无状态操作
只关注当前新生成的小批次数据,所有计算都只是基于这个批次的数据进行处理。
一个批次的数据,我们将这个批次的时间假设得长一些,比如说一天。这样的话,一个批次就是在一天时间内生成的数据,可以理解为银行系统中贷款发放流水表这种流水表中的1天内所产成的流水数据,所有数据基于这一天的数据进行处理。可以统计这一天的贷款发放额、贷款发放笔数等指标。只不过这里是实时数据处理,所以批次的间隔时间非常短,可能只有几秒甚至是1秒,而不是一天,但原理是一样的。
2、状态操作
关注多个RDD从头到尾累加起来,每个RDD中的某个值进行累加。
除了当前新生成的小批次数据,但还需要用到以前所生成的所有的历史数据,即相当于流水表的历史数据。新生成的数据与历史数据合并成一份流水表的全量数据,“状态操作”即基于这一全量数据进行操作。可以统计出银行总的贷款发放笔数,总的贷款发放额。
3、window操作
包含两个参数:window长度,slidinginterval,这两个参数必须为间隔的整数倍。
window长度:个人理解就是指定多少个批次的数据,即多少个RDD。数据积累多长时间后才开始进行数据处理。
sliding interval:滑动间隔,用来指定每隔多长时间对window长度的时间所生成的批次数据进行处理。
比如说:系统每隔5秒钟生成一个小批次的数据,我们每隔15秒就对最近的20秒所生成的4个小批次的数据(20/5=4)进行处理。如下图,1个蓝色小矩形表示一个小批次数据(即一个RDD)。第一个窗口和第二个窗口都包含了第4个RDD的数据;第二个窗口和第三个窗口都包含了第7个RDD的数据。