What is stream?

流数据、流处理? 输入流、输出流中的流指的是不是同一个东西?

什么是流数据

流数据指的是由若干(数千或上万)数据源持续生成的数据,同时以数据记录的形式发送,规模较小(约几千字节)。
流数据包含多种多样的数据,如网购数据,游戏内玩家活动、社交网站信息或地理空间服务等。此类数据需要按记录或根据滑动时间窗口按顺序进行递增式处理,可用于多种分析,包括关联、聚合、筛选和取样。借助此类分析得出的信息,公司得以深入了解其业务和客户活动的方方面面,从而对新情况作出响应。

在持续生成动态数据的大多数场景,采用流数据处理是非常有利的。如游戏公司可以搜集玩家和游戏之间的互动流数据,并将这些数据提供给游戏平台,然后再对这些数据进行实时分析,并提供各种激励措施和动态体验来吸引玩家。

批处理 v.s. 流处理

流处理系统一般会对随时进入系统的数据进行计算,得到快速地响应。与之相对的是批处理系统。
批处理可以用于对不同数据集的任意查询,一般用于计算从所含的所有数据得到的结果,并实现对大数据的深入分析。相反,流处理系统只需要摄取一个数据序列,增量地更新指标、报告和汇总统计结果,以响应每个到达的数据记录非常适合实时监控和响应函数

批处理 流处理
数据范围 对数据集中的所有或大部分数据进行查询或处理 对滚动时间窗口内的数据或仅对最近的数据记录进行查询或处理
数据大小 大批量数据 单条记录或包含几条记录的微批量数据
性能 几分钟至几小时的延迟 只需大约几秒或几毫秒的延迟
分析 复杂分析 简单的响应函数、聚合和滚动指标

批处理系统在大数据世界有悠久的历史,主要通过操作大容量静态数据集,并在计算完成后返回计算结果。批处理模式中使用的数据集通常有如下特点:

  • 有界: 批处理的数据集是有限的数据集合
  • 持久: 数据通常存放在某种持久存储中
  • 海量: 批处理操作通常是处理海量数据集的唯一方法

Apache Hadoop是一个专门用于批处理的框架。Apache Hadoop及其MapReduce处理引擎提供了一套久经考验的批处理模型,最适合处理对时间要求不高的非常大规模数据集。

而流处理系统会对随时进入系统的数据进行计算,与批处理的模式截然不同。流处理系统可以处理几乎无限量的数据,但同一时间只能处理一条(真正的流处理)或很少量(微批处理,Micro-batch Processing)数据,不同记录间只维持最少量的状态。虽然大部分系统提供了用于维持某些状态的方法,但流处理主要针对副作用更少,更加功能性的处理(Functional processing)进行优化。

程序开发过程中的流指的是什么?

在C++和Java中的输入输出流,和流处理是两码事。在C++和Java中,流是一个抽象的概念,是对输入输出设备的抽象。Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。

流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流。

eA8BPe.png

而在流处理中,流指的是数据处理的形式,并没有明确指明数据流的方向


Note: 本片博客是个人学习的摘录
Reference:

  1. https://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html
  2. https://aws.amazon.com/cn/streaming-data/
Author: lisupy
Link: http://lisupy.github.io/2019/07/22/What-is-Stream/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
支付宝打赏
微信打赏