在常规的数据处理中,我们最常访问的可能是来自于Mysql,文本等存储介质中的数据,对其进行计算分析。但是现在也越来越的出现流式计算的场景,对于某些时刻产生的数据能够进行实时性的分析。例如天猫双十一实时大屏,实时异常行为检测等。
有界数据集
有界数据集对开发者来说都很熟悉,在常规的处理中我们都会从Mysql,文本等获取数据进行计算分析。我们在处理此类数据时,特点就是数据是静止不动的。也就是说,没有再进行追加。又或者说再处理的当时时刻不考虑追加写入操作。所以有界数据集又或者说是有时间边界。在某个时间内的结果进行计算。那么这种计算称之为批计算,批处理。Batch Processing
例如:计算当前订单量。又或者是把当前mysql的数据读取到文件中等。
无界数据集
对于某些场景,类似于Kafka持续的计算等都被认定为无界数据集,无界数据集是会发生持续变更的、连续追加的。例如:服务器信令、网络传输流、实时日志信息等。对于此类持续变更、追加的数据的计算方式称之为流计算。Streaming Processing
场景比较
无界数据集与有界数据集有点类似于池塘和江河,我们在计算池塘中的鱼的数量时只需要把池塘中当前所有的鱼都计算一次就可以了。那么当前时刻,池塘中有多少条鱼就是结果。无界数据集类似于江河中的鱼,在奔流到海的过程中每时每刻都会有鱼流过而进入大海。那么计算鱼的数量就像是持续追加的。
有界数据集与无界数据集是一个相对模糊的概念,如果数据一条一条的经过处理引擎那么则可以认为是无界的,那么如果每间隔一分钟、一小时、一天进行一次计算那么则认为这一段时间的数据又相对是有界的。有界的数据又可以把数据一条一条的通过计算引擎,造成无界的数据集。所以,有界数据集与无界数据集可以存在互换的。因此业内也就开始追寻 批流统一 的框架。
能够同时实现批处理与流处理的框架有Apache Spark和Apache Flink,而Apache Spark的流处理场景是一个微批场景,也就是它会在特定的时间间隔发起一次计算。而不是每条都会触发计算。也就是相当于把无界数据集切分为小量的有界数据。
Apache Flink基于有界数据集与无界数据集的特点,最终将批处理与流处理混合到同一套引擎当中,用户使用Apache Flink引擎能够同时实现批处理与流处理任务。