storm-基本概念

  • 关键概念
    • Nimbus 提交指令的客户端

    • Topologies 计算拓扑

      • 实时计算逻辑封装到topology对象中
      • 类比Hadoop中的MapReduce Jo
        • 区别:
          1.MapRed Job会结束
          2.topology会一直运行,直到被显示结束
      • 可靠性
        • storm保证每个tuple会被完整执行
          - 追踪spout tuple产生的tuple树(多个bolt连接执行,形成树状过程)
          
      • 角色
        • Spouts
        • Bolts
        • Stream groupings;连接Spouts和Bolts
    • Streams 消息流

      • 一个Stream是一个没有边界的tuple序列
      • id
        • 每个strream会定义一个id
        • 单向流有简化,OutputFieldsDeclarer可定义一个不指定id的stream(将默认id=1)
    • Spouts 消息源

      • 是topology的消息生产者
        • 可靠的:tuple没有被storm正确处理时,会重发tuple
        • 不可靠的:不会重发
      • 主要方法
        • nextTuple:发射新tuple到topology/无tuple时返回
        • ack:storm检测到一个tuple被整个topology处理成功时调用
        • fail:storm检测到一个tuple被整个topology处理失败时调用
    • Bolts 消息处理者

      • 消息处理逻辑实现(过滤,聚合,查询等)
      • 可以发送多条stream
      • 主要方法
        • execute:以一个tuple为输入
        • OutputController:发射tuple()
      • 处理过程
        • Bolts处理一个输入的tuple
        • 发射0/多个tuple
        • 调用ack通知storm:已经处理过本tuple
    • Stream groupings 消息分发策略

      • 定义一个stream应如何分配给Bolts上的多个Tasks
      • 类型
        • Shuffle Grouping 随机分组
          - 随机派发stream中的tuples,保证每个Bolts接收到tuple数目相同
          
        • Fields Grouping 按字段分组
          - 比如可按userId分组
               - 相同userId的tuples分配到相同Bolts
               - 不同userId的tuples分配到不同Bolts
          
        • All Grouping 广播
          - tuple发向所有Bolts
          
        • Globa Grouping 全局分组
          - 一个tuple被分配到一个bolt的其中一个task
               - 分配给id值最低的task
          
        • Non Grouping 不分组
          - stream不关心谁收到tuple(目前实现类似Shuffle grouping)
               - 不同:storm会把该bolt放到其订阅者同一个线程中执行
          
        • Direct Grouping 直接分组
          - 消息发送者指定由消息接受者哪个task处理其tuple
          
    • 工作进程

      • 会在1~n个工作进程中执行
      • 工作进程包含task
        • 并行度为300的topology,若用50个工作进程执行,每个工作进程会处理其中6个tasks(每个工作进程分配6个线程)
    • Task 任务

      • 被当做很多task在集群中运行
      • 每个task对应一个线程

你可能感兴趣的:(storm,大数据,实时计算)