Storm术语解释

来源:互联网 发布:重庆python招聘 编辑:程序博客网 时间:2024/05/16 02:02
  • Topologies 用于封装一个实时计算应用程序的逻辑,类似于Hadoop的MapReduce Job。里面包括了从Spout到boit整个流程示意图。
  • Stream 消息流,是一个没有边界的tuple序列,这些tuples会被以一种分布式的方式并行地创建和处理,tuple(元祖)是Stream的基本单位。
  • Spouts 消息源,是消息生产者,他会从一个外部源读取数据并向topology里面面发出消息:tuple
  • Bolts 消息处理者,所有的消息处理逻辑被封装在bolts里面,处理输入的数据流并产生输出的新数据流,可执行过滤,聚合,查询数据库等操作
  • Task 每一个Spout和Bolt会被当作很多task在整个集群里面执行,每一个task对应到一个线程.
  • Stream groupings 消息分发策略,定义一个Topology的其中一步是定义每个tuple接受什么样的流作为输入,stream grouping就是用来定义一个stream应该如果分配给Bolts.


stream grouping分类

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


2. Fields Grouping:按字段分组,比如按userid来分组,具有同样useridtuple会被分到相同的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)


7. 自定义分组:你可以通过实现backtype.storm.grouping.CustormStreamGrouping接口创建自定义数据流组,让你自己决定哪些bolt接收哪些元组。


0 0
原创粉丝点击