zoukankan      html  css  js  c++  java
  • storm各组件基本概念

    storm的一些基本概念如下:
    1、topology(计算拓扑)
        一个实时计算应用程序逻辑被封装在topology对象中,相当于hadoop里面的一个job,跟job不同的是,topology会一直运行直到你显式杀死它。一个topology是spout和bolt组成的图状结构,而链接spout和bolt的就是stream grouping。
    2、steam(消息流)
        一个消息流是一个没有边界的tuple序列,这些tuples会被以一种分布式并行地创建和处理。对消息流的定义主要是对消息流里的tuple结构的定义,tuple里的每个字段一个名字,tuple字段类型可以是:integer、long、short、byte、string、double、float、boolean、byte array。也可以自定义类型,不过要实现对应的序列化器。
    3、spout(消息源)
        spout是storm里面一个topology的消息产生者。一般来说消息源会从一个外部源读取数据并且向topology发出消息:tuple。spout可以使可靠的也可以是不可靠的。
    4、bolt(消息处理者)
        消息处理逻辑封装在bolt内,bolt可以做很多事:过滤,聚合,查询数据库等等;ACK调用在这一层,保证每条消息都得到了处理。
    5、stream grouping(消息分发策略)
        定义每个bolt接受什么样的流作为输入、定义一个stream应该如何分配给bolts上面的多个task。
        5.1、shuffle grouping:随机分组,随机派发stream里面的tuple,保证每个bolt接收到的tuple数目相同;
        5.2、fields grouping:按字段分组;
        5.3、all grouping:广播分组,对于每个tuple,所有的bolts都会收到;
        5.4、global grouping:全局分组,这个tuple被分配到storm中的一个bolt的其中一个task

        5.5、non grouping:不分组, 这个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果, 有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。

        5.6、direct grouping:直接分组, 这是一种比较特别的分组方法,用这种分组意味着消息的发送者举鼎由消息接收者的哪个task处理这个消息。 只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来或者处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)

    6、reliability(可靠性)
        storm保证每个tuple会被topology完整的执行。storm会跟踪由每个spout tuple所产生的tuple树(一个bolt处理一个tuple之后可能会发射别的tuple从而可以形成树状结构),并且跟踪这棵tuple树什么时候成功处理完。每个topology都有一个消息超时的设置, 如果storm在这个超时的时间内检测不到某个tuple树到底有没有执行成功, 那么topology会把这个tuple标记为执行失败,并且过一会会重新发射这个tuple。
        为了利用storm的可靠性特性,在你发出一个新的tuple以及你完成处理一个tuple的时候你必须要通知storm。这一切是由OutputCollector来完成的。通过它的emit方法来通知一个新的tuple产生了, 通过它的ack方法通知一个tuple处理完成了。
    7、task(任务)
        每一个Spout和Bolt会被当作很多task在整个集群里面执行。每一个task对应到一个线程,而stream grouping则是定义怎么从一堆task发射tuple到另外一堆task。你可以调用TopologyBuilder.setSpout()和TopBuilder.setBolt来设置并行度 — 也就是有多少个task。
    8、worker(工作进程)
        一个topology可能会在一个或者多个工作进程里面执行,每个工作进程执行整个topology的一部分。比如对于并行度是300的topology来说,如果我们使用50个工作进程来执行,那么每个工作进程会处理其中的6个tasks(其实就是每个工作进程里面分配6个线程)。storm会尽量均匀的工作分配给所有的工作进程。
  • 相关阅读:
    json dump dumps load loads
    python tip: 格式化 深浅copy sorted
    转载整理
    python 计算器练习
    实验5 OSPF虚连接和验证配置
    实验4 OSPF的特殊区域STUB和NSSA
    实验3ospf路由聚合
    实验2 OSPF基本配置
    实验1静态ECMP的浮动静态路由配置
    补充实验6:tftp
  • 原文地址:https://www.cnblogs.com/frady/p/2935053.html
Copyright © 2011-2022 走看看