主要内容来自 DDIA 第十一章 流处理系统,还有自己关于 Golang 流计算的一些调研
背景
计算服务可按以下方式分为三类:
-
在线服务:当收到请求时,服务尽可能快的处理并且发挥一个响应,如常见 Web 服务。
-
批处理(离线)系统:一次性接收并处理大量的数据,往往需要执行比较长的时间(几分钟到几天),所以用户不会同步等待返回结果,这种作业一般定期执行。最常见是 MapReduce
-
流处理(近实时)系统:流处理介于在线与离线之间。批处理输入是有界的,而流处理的输入是无界的。当有新事件到达时,流系统就会处理。比较流行的流处理系统有 Storm, Spark,Flink
今天我们来简要介绍下流式处理,尤其是其中流分析相关的部分
流式处理的适用场景
一般用于实时监控报警
- 复杂事件处理,允许指定规则,从而在流中搜索特定模式的事件。使用像 SQL 这样的声明式语言来描述应该检验的事件模型
- 流分析,其与复杂事件处理之间的界限有些模糊。主要差别在其不关心特定序列,更多面向大量数据的累计效果与统计指标,例如,测量某种事件的速率,一段时间内某个值的平均值等
- 维护物化视图,使用数据库更改流(如 binlog 流