4.1.1 流式计算

更新于 2026年10月10日 版权声明
4.1.1 流式计算

流式计算是利用分布式的思想和方法,对海量“流式”数据进行实时获取、实时存储、实时处理以及实时结果缓存等操作,是大数据计算的重要组成部分。流式计算全程以数据流的形式处理数据,在数据接入端将ETL转换为数据通道,通道中流动的是“数据流”。

1)数据流

数据流是一个无限的数据序列。在现实生活中,数据流无处不在,人们日常生活相关的所有信息都是随着时间推移而不断产生的,即构成了不同的数据流。例如:学生的学习记录随着时间不断产生而构成学习数据流。在Twitter社交网络中,每时每刻都有人发送新的推文,它们构成推文数据流。

数据流是一串连续不断的数据集合,就像水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。

流是磁盘或其他外围设备中存储的数据的源点或终点。在计算机上的数据有三种存储方式,一种是外存、一种是内存、一种是缓存。比如计算机上的硬盘、磁盘、U盘等都是外存,在计算机上有内存条,缓存是在CPU里面的。外存的存储量最大,其次是内存,最后是缓存,但是外存数据的读取最慢,其次是内存,缓存最快。对于内存和外存,可以简单地理解为容器,即外存是一个容器,内存又是另外一个容器。那怎样把放在外存这个容器内的数据读取到内存这个容器,以及怎样把存在内存中的数据存到外存中呢?

在C++、Python、Java等的类库中将输入输出数据抽象称为流,分别称为输入流(Input Stream)和输出流(Output Stream),就好像水管,将两个容器连接起来。将数据从外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。

流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件、内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。采用数据流的目的就是使输入输出独立于设备,即输入流不关心数据源来自何种设备(键盘、文件、网络),输出流不关心数据的目的是何种设备(键盘、文件、网络)。

流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定字符数据。因此,一般根据流中数据类型可分为字节流和字符流两种流数据。字节流:数据流中最小的数据单元是字节;字符流:数据流中最小的数据单元是字符。

2)流计算

在计算机领域,流计算是对数据流进行分析处理的技术,它以数据流为输入,通过计算分析产生有用信息的数据输出流。流计算是一种重要的大数据处理手段,其主要特点是其处理的数据是源源不断且实时到来的。

在大数据时代,由于大量的数据以极快的速度持续产生,流计算技术更多是指对流数据进行处理的并行编程范式,它采用流水线思想将计算逻辑分解为多个处理步骤,并依次对数据流中的每一个数据进行计算处理。(https://www.daowen.com)

在流计算技术出现之前,传统的对数据流的处理方法是:先把获取的流数据存储在静态存储系统中(比如数据库、文件系统),然后再基于这些静态数据进行计算,这种计算技术本质上采用了批处理技术。真正意义的流计算技术可以对数据流中的每一个数据元素进行实时计算处理。

针对大数据的特点,对于一个流计算系统主要有以下几点需求。

(1)高吞吐

流计算系统需要在单位时间内处理大量的数据,需要具备满足大数据计算需求的高吞吐率。

(2)低延迟

流计算一般应用在对实时性要求较高的场景(例如欺诈检测实时在线交易等)。为满足流计算系统的低延迟,必须让数据在系统的各个操作间保持移动。

(3)可扩展

随着数据规模的增加,相关应用对计算系统的性能要求越来越高,流计算系统需要能够通过资源的配置来进行应对处理。

(4)高可用

由于应用需要处理的数据量过大,单机系统无法满足应用高吞吐和低时延需求,通常需要使用集群来扩展系统性能。在大规模集群中,虽然每个机器发生故障的可能性很低,但是对于整个集群来说,发生故障的可能性却很高。所以,需要保证在某个执行任务的节点故障时,系统能够自动快速地将数据恢复到错误发生以前的状态,并通过重新调配任务等方法再次计算数据,使系统恢复到正常状态,处理连续到达的流数据,保证系统的可用性。

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)