美文网首页
Storm介绍之概念

Storm介绍之概念

作者: Bloo_m | 来源:发表于2016-11-13 23:20 被阅读0次

什么是实时流计算?

       主要的处理模式可以分为:流处理,批处理

                流处理是直接处理,有时也分为在线,离线,近线(straight-through process)

                批处理是先存储后处理(store-process)

实时的流计算系统

      Yahoo的S4,S4是一个通用的,分布式的,可扩展的,分区容错的,可插拔的流式系统,主要是为了解决:搜索广告的展现、处理用户的点击反馈

    Facebook使用puma和hbase相结合来处理实时数据,使批处理计算平台具备一定实时计算能力,不过这不算是一个开源的产品,只是内部使用

Storm是什么?

       storm是一个分布式,高容错的实时计算系统,对数据实时计算提供了简单的spout和bolt原语

架构

                      

核心组件

          Storm的内核都是由clojure编写的(大部分扩展工作都是java编写的)

            Nimbus:负责资源分配和任务调度

           Supervisor:负责接收nimbus分配的任务,启动和停止属于自己管理的worker进程

           Worker:运行具体处理组件逻辑的进程,每个Worker都属于一个特定的Topology,每个supervisor节点的worker进程有多个,每个worker使用一个单独的端口,worker对Topology中的每个组件运行一个或多个Executor线程来提供Task的执行服务

          Topology:storm中运行的一个实时应用程序,类似于网络拓扑图的一种虚拟结构.Storm拓扑类似MapReduce任务,一个关键的区别是MapReduce任务运行一段时间后最终会完成,而Storm拓扑一直会运行(直到杀死它),一个Topology是由一组spout组件和Bolt组件组成的图

          Spout:在一个Topology中产生源数据的组件,向Topology中发出的Tuple可以是可靠的,也可以是不可靠的,一个可靠的数据源可以重新发射一个Tuple(如果该Tuple没有被Storm成功处理),但是一个不可靠的消息源Spout一旦发出,一个Tuple就把它彻底"遗忘",也就不可能再发了

         Bolt:消息的处理者,在一个Topology中接收数据然后执行处理的组件

                Bolt的生命周期:首先客户端创建Bolt,然后将其序列化,并提交给集群中的主机,之后集群启动Worker进程,反序列化Bolt,调用prepare方法开始处理元组,接下来,Bolt处理Tuple,Bolt处理一个输入Tuple,发射0个或多个Tuple,然后调用ack通知Storm自己已经处理过这个Tuple了,Storm提供了一个IBasicBolt自动调用ack,Bolt类接收由Spout或者其他上游Bolt类发来的Tuple,对其进行处理

        Tuple:一次消息传递的基本单元

               Tuple的生命周期:storm 通过调用spout的nextTuple方法来获取下一个Tuple,Spout通过open方法参数里面提供的SpoutOutputCollector来发射新tuple到它的其中一个输出消息流,发射tuple的时候spout会提供一个message-id,后面我们会通过这个tuple-id来追踪这个tuple

                   然后,这个发射的tuple被传送到消息处理者Bolt那里,storm会跟踪这个消息的树形结构是否创建,根据message-id调用spout那里的ack函数,以确认tuple是否被完全处理,如果tuple超时就会调用spout的fail方法

                  由此看出同一个tuple不管是acked还是fail都是由创建它的那个spout发出的,所以即使spout在集群环境中执行了很多的task,这个tuple也不会被其他任务调用或生成acked或failed状态,总之,Storm会利用内部的Acker机制保证每个Tuple被可靠地处理,最后,在任务完成后,Spout调用Close方法结束Tuple的使命

         Executor:

                产生于Worker进程内部的线程,会执行同一个组件的一个或者多个Task

       Task:worker中的每一个spout/bolt的线程称为一个Task

       Stream grouping:消息的分组方法

       Worker、Task、Executor三者之间的关系:

                  Worker是进程,Executor对应于线程,Spout或Bolt是一个个的Task;在Storm集群中的一个物理节点启动一个或者多个worker进程,集群中的Topology都是通过这些Worker进程进行的,Worker进程中又会运行一个或多个executor线程,每个Executor线程只运行一个Topology的一个组件(Spout/Bolt)的Task任务,Task又是数据处理的实体单元

                   同一个Worker只执行同一个Topology相关的Task;在同一个Executor中可以执行多个同类型的Task,即在同一个Executor中,要么全部都是Bolt类的Task,要么全是Spout类的Task;在运行时,Spout和Bolt需要包装成一个又一个的Task

                     

与hadoop角色对比

               

Storm数据交互图

              

Topology的提交流程图

                 


数据流模型

      Topology中,Spout是Stream的源头,负责为Topology从特定数据源发射Stream;Bolt可以接收任意多个Stream作为输入,然后进行数据的加工处理过程,如果需要,Bolt还可以发射出新的Stream给下级Bolt进行处理

           

      Stream消息流:Stream消息流是一个有向无界的Tuple序列,这些Tuple以分布式的方式并行地创建和处理,定义消息流主要是定义消息流的Tuple

     Stream:源源不断传递地tuple就组成了stream

     Stream Grouping 消息流

              Stream Grouping(消息流组)就是用来定义一个流如何分配Tuple到Bolt.Storm包括6种流分组类型

                1.随机分组(shuffle Grouping)

                   随机分发Tuple到Bolt的任务,保证每个任务获得相等数量的Tuple

                2.字段分组(Fields Grouping)

                    根据指定字段分割数据流,并分组.这种grouping机制保证相同field值的tuple会去同一个task.例如对于WordCount来说同一个单词会去同一个task

                3.全部分组(AllGrouping)

                     广播发送,将每一个Tuple发送到所有的Task.谨慎使用

               4.全局分组(GlobalGrouping)

                    所有的Tuple会被发送到某个Bolt中id最小的那个task

              5.无分组(NoneGrouping)

                  不关心Tuple发送给哪个Task来处理,等价于ShuffleGrouping

              6.直接分组(DirectGrouping)

                  直接将Tuple发送到指定的Task来处理

特点

            分布式简单

            运维简单

            高度容错

            无数据丢失

            多语言

            低延迟

            高性能

            可扩展

进入Storm安装部署以及API:Storm安装部署和API

相关文章

  • Storm介绍之概念

    什么是实时流计算? 主要的处理模式可以分为:流处理,批处理 流处理是直接处理,有时也分为在线,离线,近线(st...

  • Storm入门系列之一:storm核心概念及特性

    Storm入门系列之一:storm核心概念及特性 本文的将介绍一些 storm 入门的基础知识,包括 storm ...

  • Storm入门

    Storm 基本介绍 什么是 Storm 首先Storm是Apache顶级项目之一Storm 官网 Storm 是...

  • hadoop系列之Storm入门

    并发编程网有更好的翻译 一.Javadoc javadoc 二.概念 下面介绍storm的一些基本概念和一些...

  • storm概念

    此页面列举了Storm的主要概念和资源连接。讨论的概念有: 拓扑(Topologies) 流(Streams) S...

  • storm介绍

    1 基本概念 1.1 Nimbus Storm集群主节点,负责资源分配和任务调度。我们提交任务和截止任务都是在Ni...

  • storm topology生命周期

    转述自:Lifecycle of a Storm Topology 本文介绍的storm topology生命周期...

  • 32 storm 单词计数

    上一篇 简单看 storm, 主要简单讲解了storm 的集群架构、核心概念、并行度、流分组,本篇利用 storm...

  • storm(基础一)概念

    Storm 的主要概念, 概念如下: Topologies(拓扑)Streams(流)SpoutsBoltsStr...

  • 当storm遇上python

    storm是什么 他的官方文档是这样介绍的 Storm is a distributed realtime com...

网友评论

      本文标题:Storm介绍之概念

      本文链接:https://www.haomeiwen.com/subject/eticpttx.html