美文网首页
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介绍之概念

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