一.流处理的相关概念
数据的时效性
日常工作中,一般会先把数据存储在表,然后对表的数据进行加工、分析。既然先存储在表中,那就会涉及到时效性概念。
如果处理以年,月为单位的级别的数据处理,进行统计分析,个性化推荐,那么数据的的最新日期离当前有几个甚至上月都没有问题。但是如果处理的是以天为级别,或者一小时甚至更小粒度的数据处理,那么就要求数据的时效性更高了。比如:
对网站的实时监控
对异常日志的监控
这些场景需要工作人员立即响应,这样的场景下,传统的统一收集数据,再存到数据库中, 再取出来进行分析就无法满足高时效性的需求了。
流式计算和批量计算
Batch Analytics 批量计算: 统一收集数据->存储到DB->对数据进行批量处理,就是传统意义上使用类似于 Map Reduce、Hive、Spark Batch 等,对作业进行分析、处理、生成离线报表
Streaming Analytics 流式计算:顾名思义,就是对数据流进行处理,如使用流式分析引擎如 Storm,Flink 实时处理分析数据,应用较多的场景如实时大屏、实时报表。
它们的主要区别是:
与批量计算,慢慢积累数据不同,流计算立刻计算,数据持续流动,完成之后就丢弃;
批量计算是维护一张表,对表进行实施各种计算逻辑。流式计算相反,是必须先定义好计算逻辑,提交到流式计算系统,这个计算作业逻辑在整个运行期间是不可更改的;
计算结果上,批量计算对全部数据进行计算后传输结果,流式计算是每次小批量计算后,结果可以立刻实时化展现;
Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams.
2. DataStream
任何类型的数据都可以形成一种事件流,信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。
数据可以被作为 无界(unbounded) 或者 有界(bounded) 数据流来处理:
有边界流(bounded stream):有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。
无边界流(unbound stream):有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
DataStream(数据流)官方定义:
]
DataStream(数据流)源码中定义:
DataStream数据流有5个子类,截图如下: