流计算

  • 更新时间: 2018-01-08
  • 来源: 原创或网络
  • 浏览数: 34次
  • 字数: 12747
  • 发表评论

流计算的产生即来源于对于上述数据加工时效性的严苛需求: 数据的业务价值随着时间的流失而迅速降低,因此在数据发生后必须尽快对其进行计算和处理。而传统的大数据处理模式对于数据加工均遵循传统日清日毕模式,即以小时甚至以天为计算周期对当前数据进行累计并处理,显然这类处理方式无法满足数据实时计算的需求。在诸如实时大数据分析、风控预警、实时预测、金融交易等诸多业务场景领域,批量(或者说离线)处理对于上述对于数据处理时延要求苛刻的应用领域而言是完全无法胜任其业务需求的。而流计算作为一类针对流数据的实时计算模型,可有效地缩短全链路数据流时延、实时化计算逻辑、平摊计算成本,最终有效满足实时处理大数据的业务需求。

什么是流数据 ?

从广义上说,所有大数据的生成均可以看作是一连串发生的离散事件。这些离散的事件以时间轴为维度进行观看就形成了一条条事件流/数据流。不同于传统的离线数据,流数据是指由数千个数据源持续生成的数据,流数据通常也以数据记录的形式发送,但相较于离线数据,流数据普遍的规模较小。流数据产生源头来自于源源不断的事件流,例如客户使用您的移动或 Web 应用程序生成的日志文件、网购数据、游戏内玩家活动、社交网站信息、金融交易大厅或地理空间服务,以及来自数据中心内所连接设备或仪器的遥测数据。


通常而言,流计算具备三大类特点:

  • 实时(realtime)且无界(unbounded)的数据流

    流计算面对计算的 是实时且流式的,流数据是按照时间发生顺序地被流计算订阅消费。且由于数据发生的持续性,数据流将长久且持续地集成进入流计算系统。例如,对于网站的访问点击日志流,只要网站不关闭其点击日志流将一直不停产生并进入流计算系统。因此,对于流系统而言,数据是实时且不终止(无界)的。

  • 持续(continuos)且高效的计算

    流计算是一种”事件触发”的计算模式,触发源就是上述的无界流式数据。一旦有新的流数据进入流计算流计算立刻发起并进行一次计算任务,因此整个流计算是持续进行的计算

  • 流式(streaming)且实时的数据集成

    流数据触发一次流计算的计算结果,可以被直接写入目的数据存储,例如将计算后的报表数据直接写入RDS进行报表展示。因此流数据的计算结果可以类似流式数据一样持续写入目的数据存储。

流式计算主要应用场景就是在线海量数据处理,处理大量用户的在线请求,可以理解为一台服务器,这个服务是一直开着的,只要用户有请求它都会去实时处理并输出结果或者响应,可以看成一个数据流源源不断的流进计算系统,计算系统作为后台服务源源不断的进行计算,最终将结果源源不断的输出,这就是对流式计算最基本一层的认识

在实际应用中,可以处理用户线上实时的请求,在线系统产生的日志,记录用户行为的数据库,新闻热点,电商促销,微博热词推荐,实时用户在线查询等

目前流式计算最著名的框架就是:Spark、Twitter的Storm、Yahoo的S4

流式计算的共同特征是:

1、和前面Hadoop生态系统作对比主要是:计算中数据持续到来、实时系统会作为后台服务持续运行、适用于时效性较高的场景

2、非常方便的编写自己的计算逻辑,而不用关心底层的实现方式,比如Map和Reduce,我们只需要编写两个方法,和单机的计算方式一样,框架自己完成分布式协调计算的功能,所以对于用户使用非常方便

3、数据可靠性,系统需要保证数据不被丢失,也就是系统的高可用性

4、容错性 用户不必关心错误处理,系统应该提供高容错性并且有效的调度和管理资源

5、超时设置 超时时间的大小一定要被重视,时间太短会误杀正常运算,时间太长不能快速的检测错误,系统应该有延时自动学习的功能,即根据多个计算任务找出出错的任务,然后重新将任务调度到系统中的其他节点,这样保证整个系统的性能


Spark的设计思想是将流式计算分解成一系列短小的批处理作业,也就是把Spark Streaming的输入数据按照时间分成一段一段的数据,每一段数据都转换成Spark中的RDD,然后在Spark内部对RDD进行处理操作,结果可以放到内存中继续处理或者存储到外部设备

Storm将计算逻辑抽象为拓扑Topology,Spout是Topology的数据源,数据源可以是日志或者消息队列,也可以是数据库中的表等等数据,Bolt负责数据的整个传递方向,也叫消息处理者,Bolt可能由另外2个Bolt进行join得到,在Storm数据流的单位就是Tuple(元组),这个Tuple可能是由多个Fields字段构成,每个字段都由Bolt定义,Storm中工作进程叫做worker,一个Topology实际上实在多个worker中运行的,在集群中每个Spout和Bolt都是由多个Tasks(任务)组成的,对于宏观的节点,分为Nimbus主节点和Supervisor从节点,Nimbus通过Zookeeper管理集群所有的Supervisor,Storm提供很多配置来调整Nimbus、Supervisor进程和正在运行的Topology的行为

所以,总结一下Storm的计算流程,首先是用户使用Storm提供的API编写Topology计算逻辑,然后使用Storm提供的Client将Topology提交给Nimbus,然后Nimbus将Task作业指派给Supervisor,Supervisor在得到Task后,为Task启动Worker由Worker执行具体的Task,最后完成计算任务

Storm实际性能上比Spark还要高,总体上来说,SparkStorm流式计算中最著名使用也最广泛的2个框架

另外Google为了应对并发数据流水线和以及实时数据,将MapReduce分布式计算模型进行了全新尝试,推出Cloud Dataflow,可以构建、管理、优化复杂流水线,构建云应用,并且提供了基于Java的统一API,开发者只需要使用简单的API即可掌握Cloud Dataflow的使用,Google Cloud Platform还为开发者提供了一系列工具:云保存、云调试、云追踪和云监控,BigQuery为Dataflow提供存储,数据流经过Dataflow的清洗,可以放到BigQuery中存储;同时Dataflow还可以连接BigQuery进行数据的读取,因此如果想在Dataflow中使用一些开源资源是非常方便的,Dataflow的生态系统如下图所示:

流计算,by 5lulu.com

我来评分 :6
0

转载注明:转自5lulu技术库

本站遵循:署名-非商业性使用-禁止演绎 3.0 共享协议