背景介绍
批处理与流处理:
批处理是进行批量处理
从图上可以看出,它具有调度延时和处理延时。
流处理是进行流式处理
它更能满足低延时的需求。
场景的批处理框架有MapReduce、Spark Core、Inceptor(Nucleon)、Flink Dataset 等。
流式计算框架包括:基于事件驱动(Event-driven)的Storm Core(攒一小批处理)、Flink DataStream、Slipstream,基于微型批处理(Micro-batch)的:Storm Trident、Spark Streaming(微批处理的代表,延时高,500ms~1s)、Slipstream。
Slipstream简介
Slipstream是一个融合事件驱动与微批处理的实时流计算引擎和分布式流式SQL引擎。
Slipstream基本概念
Stream(数据流):从Kafka等地方获取到的数据。
StreamJob(流任务):对一个或多个Stream进行计算,并将结果写入一张表的任务。需要有落盘的过程。
Application(流应用):一组业务逻辑相关的StreamJob的集合。
Stream(数据流)
分为Input Stream(输入流)、Derived Stream(衍生流)
首先,Input Stream(输入流)是直接接收数据源传来的数据而形成的Stream。
在微批(Micro-batch)模式下,将Input Stream按时间划分成若干小数据块(Batch)来处理,即在由若干单位时间组成的时间间隔内,将接收的数据放到一个Batch中(Batch的时间长度称为Batch Duration)。
在事件驱动(Event-driven)模式下,以单条数据被Input Stream接收为事件,逐条读取并处理。
Derived Stream(衍生流)是由StreamSQL语句对已有的Stream变形(Transform)得来的。Stream变形通常由CSAS(Create Stream As Select)语句完成。
在微批模式下,是通过已有Batch计算得到新Batch的过程:
- 针对单个batch的变形(单Batch变形),是通过对Stream中单个Batch进行计算得到新Batch的过程,如下图所示:
- 窗口变形(多Batch变形):对一个时间窗口(Window)内的多个Batch进行计算得到新Batch的过程。
例如:针对双11的销售场景,商户想获取店铺产品的点击数据,商户向平台提出数据请求,平台每一分钟,告诉商户之前三分钟的点击和销售数据,这就是一个典型的窗口计算。实际使用场景是非常多的。
在衍生流的事件驱动模式下:
每得到一条数据就对其进行变形,得到Derived Stream,也可以分为单数据变形和窗口变形(多数据变形): - 单数据变形:对Stream中单条数据进行计算得到新数据的过程
- 窗口变形(多数据变形):对一个时间窗口(Window)内的多条数据进行计算得到新数据的过程
StreamJob(流任务)
StreamSQL中的Stream是静态的,它仅仅描述了如何对数据源传来的数据进行接收和变形的计划,但并不执行这些计划。要让StreamSQL执行计划,需要有相应的Action操作来触发StreamJob。将一个stream真正变成了一个流水线。
如上图,一个StreamJob启动时,StreamSQL会为每一个Input Stream启动一组称为Receiver的任务来接收数据,接收来的数据经过一系列Derived Stream的变形最终被插入一张表,供用户查询。
Application(流应用)
Application是一组业务逻辑相关的StreamJob集合。
合理使用Application划分StreamJob可以实现资源的共享和隔离:
- 资源共享:Application内使用同一个Input Stream的StreamJob共享一组Receiver
- 资源隔离:不同Application中的StreamJob若使用同一个Input Stream,则每个Application都为这个InputStream启动一组Receiver
可以联想到kafka的Consumer Group,Group中共享这个数据。
StreamSQL vs. 普通SQL
- DML语句的运行机制不同:
普通SQL:阻塞式运行,提交SQL后,用户需等待SQL执行结束,期间命令被持续阻塞,无法执行其他命令。
StreamSQL:背景运行,计算任务持续在后台运行,执行StreamSQL的DML语句会立即返回结果。 - 查询结果的输出不同:
普通SQL:查询结果或者显示在Console,或者通过JDBC读取
StreamSQL:用户必须显式地指定查询结果输出到某个地方,StreamSQL:用户必须显式地指定查询结果输出到某个地方,查询结果通常会插入到表中,例如:Insert Into result_table Select …
复习
事件驱动模式与微批模式有什么不同?
两种处理模式下的窗口变形有什么不同?
简述一下SteamJob的主要作用。
StreamSQL与普通SQL有什么区别?
参考
课程内容来自:南京大学+星环科技课程,大数据大数据理论与实践课程