前言
作者在之前写过一个大数据的专栏,包含GFS、BigTable、MapReduce、HDFS、Hadoop、LSM树、HBase、Spark,专栏地址:
流计算和大数据是紧密相关的,现在接那个大数据专栏,继续向下写流计算专栏。这是第一篇。
目录
1.什么是流计算
流计算,就是对流式数据的计算,是专门用来处理流式数据的。因此在聊流计算之前,我们要先明白什么是静态数据和流式数据。
静态数据:
静态数据不是实时产生的,是有一定历史的数据,静态数据一般是用来进行一些统计分析的,比如数据仓库中的数据就是典型的静态数据。再比如MapReduce做统计分析,存在HDFS中的数据也是静态数据。
流式数据:
流式数据其实就是动态数据,是实时产生的,其应用场景对实时性要求很高,基本上是要求需要对其做实时处理的数据。比如:
-
物联网中的实时监测设备,诸如烟感、PM2.5监测、安防等设备,要对实时的流式数据做实时的分析,从而判断是否触发报警之类的操作。
-
购物网站上的"可能感兴趣"的推荐,就是基于用户实时点击浏览产生的流式数据来给客户进行推荐的。
上面这样说只是一方面,其实仔细思考就会发现静态数据、动态数据之间没有很明确的边界,静态数据也会有新的数据进来,流式数据的业务场景中也有对历史数据计算的需求。
其实从业务场景上能更好的区分是不是流计算的场景,流计算的场景一句话就能概括:
大量数据实时产生,涌过来,从这些大量实时数据中计算出实时结果。
流式数据的特征:
-
快速持续的到达
-
来源众多、格式复杂
-
数据量大,不太关注存储,一旦经过处理后,要么被丢弃,要么被归档存储。
2.流计算的架构
流数据的量大、产生的速度快、来源和格式杂,这些特点都是会拉低计算速度的点,所以流计算的核心就是要就是要稳定可靠高效的处理流式数据。市面上的各种流计算框架针对这些核心问题,各自给出了自己的解法,常用的流计算框架:
-
twitter storm
-
spark strem
流计算是整个大系统的一环,接下来我们看看引入流计算的系统架构一般长什么样子。
以flink为例,展示一下流计算常见架构:
观察上面系统,可以发现引入流计算的系统架构一般有以下部分组成:
-
数据采集
-
数据传输
-
数据处理
-
数据存储
-
数据展现
数据采集:
传感器、各个服务模块上的各个日志代理等。
数据采集在软件层面无非就是从浏览器、手机终端等设备将数据发给采集服务器。
采集服务器要接收数据,在性能上要有所考虑,关于性能无非以下点:
-
吞吐量(TPS),要在IO模型上有所抉择,阻塞?非阻塞
-
时延,有时延要求时首先要报时延,再说拉高吞吐量的事儿
-
TCP连接,当有大量连接需要维持时,用非阻塞IO服务器,如netty;当连接数量较少时,用长连接和连接池
数据传输:
负责数据的流转,数据总线,一般用MQ来实现,数据传输要关注的点:
- 吞吐量,流式数据的量大,吞吐量肯定要跟上,不能造成数据积压,数据才有实时性。
- 可靠性,可靠性肯定要跟上,数据尽可能不要丢。
数据处理:
流计算的核心,也是流计算框架主要工作的环节,用计算引擎来对流进行:
-
转化、清洗、转换
-
计数、求和、均值、标准差、极值、聚合、关联、直方图等
数据存储:
根据自己的业务场景来决定计算出来的结果是否需要存储?如果要存储就要考虑自己业务场景的需求:
-
数据量大不大?
-
时延要求如何?
-
吞吐量大不大?
然后来选择对应的存储介质,内存?关系型数据库?非关系型数据库?分布式文件系统?等等等等
3.常见流计算场景
以下是流式计算的一些典型应用场景:
- 实时数据分析
- 金融交易:实时监测市场波动、交易异常和欺诈检测。
- 物联网(IoT):实时处理传感器数据,监控设备状态,触发警报。
- 日志处理与监控
- 系统监控:实时监控服务器日志,快速发现并处理系统故障。
- 应用性能管理(APM):实时分析应用日志,优化性能瓶颈。
- 社交媒体分析
- 趋势分析:实时分析社交媒体上的热点话题和用户情绪。
- 推荐系统:根据用户实时行为更新推荐内容。
- 网络安全
- 入侵检测:实时分析网络流量,识别潜在的安全威胁。
- 异常检测:监控网络活动,及时发现异常行为。
- 电子商务
- 库存管理:实时更新库存信息,避免超卖情况。
- 订单处理:实时跟踪订单状态,提高客户满意度。
- 智能制造
- 生产监控:实时监控生产线状态,提高生产效率。
- 预测性维护:通过分析机器运行数据,提前预测并预防故障。
- 交通与物流
- 交通管理:实时分析交通流量,优化交通信号控制。
- 物流追踪:实时更新货物位置,提高物流效率。