Strom-(1)基本结构

1、Strom的优势:node

    1.容错性。Storm会管理工做进程和节点的故障。编程

    2.快速。系统的设计保证了消息能获得快速的处理,使用ZeroMQ做为其底层消息队列。架构

    3.可靠的消息处理。Storm保证每一个消息至少能获得一次完整处理。任务失败时,它会负责从消息源重试消息。oop

Strom的简单原理:spa

        Storm集群主要由一个主节点和一群工做节点(worker node)组成,经过Zookeeper进行协调。线程

2、基本架构:设计

            

        主节点( Nimbus ):code

        主节点一般运行一个后台程序 —— Nimbus,用于响应分布在集群中的节点,分配任务和监测故障。这个很相似于Hadoop中的 Job Tracker。orm

        工做节点( Supervisor ):队列

        工做节点一样会运行一个后台程序 —— Supervisor,用于收听工做指派并基于要求运行工做进程。每一个工做节点都是topology中一个子集的实现。而Nimbus和Supervisor之间的协调则经过Zookeeper系统或者集群。

        Zookeeper

        Zookeeper是完成Supervisor和Nimbus之间协调的服务。而应用程序实现实时的逻辑则被封装进Storm中的“topology”。topology则是一组由Spouts(数据源)和Bolts(数据操做)经过Stream Groupings进行链接的图。

       Worker

        运行具体处理组件逻辑的进程。

        Task

         worker中每个spout/bolt的线程称为一个task. 在storm0.8以后,task再也不与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。

3、编程架构

        Topology

        1  拓扑是一个计算图; 2  拓扑中的每个节点都包含处理逻辑;3    拓扑描述了数据在各节点间传输的方向;4  拓扑描述了spouts和bolts任务间的关系

        Tuple是一个消息单元,源源不断的消息单元(tuples)就组成了流(Stream)

       Stream groupings:消息分发策略

  

分发策略分类:

    1.Shuffle Grouping: 随机分组, 随机派发stream里面的tuple, 保证每一个bolt接收到的tuple数目相同.

    2.Fields Grouping:按字段分组, 好比按userid来分组, 具备一样userid的tuple会被分到相同的Bolts, 而不一样的userid则会被分配到不一样的Bolts.

    3.All Grouping: 广播发送, 对于每个tuple, 全部的Bolts都会收到.

    4.Global Grouping: 全局分组,这个tuple被分配到storm中的一个bolt的其中一个task.再具体一点就是分配给id值最低的那个task.

    5.Non Grouping: 不分组,意思是说stream不关心到底谁会收到它的tuple.目前他和Shuffle grouping是同样的效果,有点不一样的是storm会把这个bolt放到这个bolt的订阅者同一个线程去执行.

    6.Direct Grouping: 直接分组,这是一种比较特别的分组方法,用这种分组意味着消息的发送者决定由消息接收者的哪一个task处理这个消息.只有被声明为Direct Stream的消息流能够声明这种分组方法.并且这种消息tuple必须使用emitDirect方法来发射.消息处理者能够经过TopologyContext来或者处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)。


相关文章
相关标签/搜索