探寻流式计算

一、静态数据和流数据

静态数据:为了支持决策分析而构建的数据仓库系统,其中存放的大量历史数据就是静态数据。

流数据:以大量、快速、时变的流形式持续到达的数据。(例如:实时产生的日志、用户实时交易信息)

流数据具有以下特点:

(1)、数据快速持续到达,潜在大小也许是无穷无尽的。 (2)、数据来源众多,格式复杂。 (3)、数据量大,但是不十分关注存储,一旦经过处理,要么被丢弃,要么被归档存储(存储于数据仓库)。 (4)、注重数据的整体价值,不过分关注个别数据。 (5)、数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序。

在传统的数据处理流程中,总是先收集数据,然后将数据放到DB中。然后对DB中的数据进行处理。

流计算:为了实现数据的时效性,实时消费获取的数据。

二、批量计算和流计算

批量计算:充裕时间处理静态数据,如Hadoop。实时性要求不高。

流计算:实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息(实时、多数据结构、海量)。

流计算秉承一个基本理念,即数据的价值随着时间的流逝而降低,如用户点击流。因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。流数据数据格式复杂、来源众多、数据量巨大,不适合采用批量计算,必须采用实时计算,响应时间为秒级,实时性要求高。批量计算关注吞吐量,流计算关注实时性。

流计算的特点:

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

2、持续(continuos)且高效的计算。流计算是一种”事件触发”的计算模式,触发源就是上述的***流式数据。一旦有新的流数据进入流计算,流计算立刻发起并进行一次计算任务,因此整个流计算是持续进行的计算。

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

三、流计算框架

为了及时处理流数据,就需要一个低延迟、可扩展、高可靠的处理引擎。对于一个流计算系统来说,它应达到如下需求:

  • 高性能:处理大数据的基本要求,如每秒处理几十万条数据。

  • 海量式:支持TB级甚至是PB级的数据规模。

  • 实时性:保证较低的延迟时间,达到秒级别,甚至是毫秒级别。

  • 分布式:支持大数据的基本架构,必须能够平滑扩展。

  • 易用性:能够快速进行开发和部署。

  • 可靠性:能可靠地处理流数据。

目前有三类常见的流计算框架和平台:商业级的流计算平台、开源流计算框架、公司为支持自身业务开发的流计算框架。

(1)商业级: InfoSphere Streams(IBM)和StreamBase(IBM)。

(2)开源流计算框架,代表如下:Storm(Twitter)、 S4(Yahoo)。

(3)公司为支持自身业务开发的流计算框架:Puma(Facebook)、Dstream(百度)、银河流数据处理平台(淘宝)。

四、流计算框架Storm

Storm是Twitter开源的分布式实时大数据处理框架,随着流计算的应用日趋广泛, Storm的知名度和作用日益提高。接下来介绍Storm的核心组件以及性能对比。

Storm的核心组件

  • Nimbus:即Storm的Master,负责资源分配和任务调度。一个Storm集群只有一个Nimbus。

  • Supervisor:即Storm的Slave,负责接收Nimbus分配的任务,管理所有Worker,一个Supervisor节点中包含多个Worker进程。

  • Worker:工作进程,每个工作进程中都有多个Task。

  • Task:任务,在 Storm 集群中每个 Spout 和 Bolt 都由若干个任务(tasks)来执行。每个任务都与一个执行线程相对应。

  • Topology:计算拓扑,Storm 的拓扑是对实时计算应用逻辑的封装,它的作用与 MapReduce 的任务(Job)很相似,区别在于 MapReduce 的一个 Job 在得到结果之后总会结束,而拓扑会一直在集群中运行,直到你手动去终止它。拓扑还可以理解成由一系列通过数据流(Stream Grouping)相互关联的 Spout 和 Bolt 组成的的拓扑结构。

    探寻流式计算