废话: 大家有时候可能会比较迷惑,流式计算?批计算?这些字我都认识,解释我也能大概明 白,但是还是有些云里雾里,这到底是啥啊,能不能让我彻底明白啊?好了,从头看到尾,还不明白就🦶踩流式计算和批计算。
语意
什么是有界数据?
在这里定义为:有界数据即知道将要计算的这些数据有多大,在这个基础上这些数据不会再增加。
什么是无界数据?
在这里定义为:无界数据即不知道将要计算的数据最终有多大,可能会随着时间持续增加。这里可以看出,时间维度可以定义数据的界限。
什么是批计算?
百度百科:
批计算是指对静态数据的批量处理,即当开始计算之前数据已经准备到位,主要用于数据挖掘和验证业务模型;流式计算是指对具有时效性的数据进行的计算,流式计算需要依赖上游数据传输的正确性和实时性以及下游存储系统的高吞吐
白话:
可理解为对已知的一批数据进行作业,比如,到晚上了12点了,我想对今天一整天的用户操作数据做一个分析,那这时候只需要从数据库取出来今天一整天的用户操作数据记录,对这些数据进行计算,这些数据可能有几G,几T,但是对于今天来说,已经到12点了,它不会再增加了,所以,它的量是固定的,我们只需要对它进行计算即可,也就是对今天这批数据进行计算,这里就可以看出,这是以时间为维度,对数据进行了定界,所以批量计算一定是对有界数据进行计算。
什么是微批计算?
白话:
顾名思义,微批计算即是微小的批计算,比如上面的例子,批计算是对已知的当天数据进行计算,它的时间单位是天,那如果我们以秒为单位,比如,10秒钟计算一次,或者5分钟计算一次,这时候的时间跨度并不大,而且这个计算也是持续的,直到一整天结束,而我们也并不知道,今天会产生多少数据,但是我们知道的是我们有一个时间间隔,在这个时间间隔之内,产生的数据就是一小批数据,对这小批数据进行计算,以这种时间分割,不停计算,也叫流式计算,或者说叫微批计算更切且。我们的spark-stream就是这种计算方式,即微批流式计算。
什么是流式计算?
百度百科:
在传统的数据处理流程中,总是先收集数据,然后将数据放到数据库中。当人们需要的时候通过数据库对数据做查询,得到答案或进行相关的处理。这样看起来虽然非常合理,但是结果却非常的紧凑,尤其是在一些实时搜索应用环境中的某些具体问题,类似于MapReduce方式的离线处理并不能很好地解决问题。这就引出了一种新的数据计算结构---流计算方式。它可以很好地对大规模流动数据在不断变化的运动过程中实时地进行分析,捕捉到可能有用的信息,并把结果发送到下一计算节点。
白话:
可以理解为流水线作业,比如,就拿“抖音”来说,“抖音”,我们都知道刷某一类视频刷多后,就会自动推送该类视频(这里吐槽一下,这类推荐很容易将人带入信息茧房,如果能供用户选择不同的推荐方式、或者说算法,那将会是一大改变),这时候的推荐不是你第一天刷,第二天再接着刷的时候才推荐的吧?而是刷着刷着根据你的浏览轨迹,就进行了推荐,比如,你可能在某个视频上停留的时间比较长,可能对某个视频点了赞,可能连着返回看了某个视频几次,这时候采集到这些操作轨迹进行计算,此时,这种计算就是流式计算了(当然,纯流式计算是以一条record-记录为单位),不知道抖音是纯流式还是微批。也就是说,你一直刷,计算一直不停,在计算之前,也不知道你要刷多少,刷多久,所以,就以一次记录为单位,进行计算,也就是我们通常说的实时计算。
误区
不管是流式计算,还是批式计算,不是说这个好,那个棒,要看你的使用场景,而且他们并不是完全互斥的,不是说用了这个就用不了那个了,他们也可以结合起来用,最主要的是要看场景。当然,从spark-stream的微批流式计算,到flink的纯流式计算,一定的技术优点也是有的,主要是看你从那个维度看待这件事。