Strom-(1)基本结构

一、Strom的优点:

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

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

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

Strom的简单原理:

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

二、基本架构:

            Strom-(1)基本结构_第1张图片

        主节点( Nimbus ):

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

        工作节点( 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。

三、编程架构

        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)。




你可能感兴趣的:(Strom-(1)基本结构)