1元组
由元组的定义可以知道declarer.declare中key的数据和emit发射的value数量需相等
2流stream
不同于元组,流是抽象概念,是无界的元组序列【无界也就是说消息源可以源源不断的输入实时数据】,这些数据在拓扑上被传递计算,这些数据形象的被抽象成stream 其中OutputFieldsDeclarer不仅申明流还可以申明模式
以上的执行都是针对同一拓扑,不同拓扑之间互不影响
3spout数据源
其特性如下:1 支持可靠(在拓扑上完成为可靠)[ack(),fail()方法]和不可靠特性 ,2nextTuple会被不停调用,[如果没有新的元组则调用不产生影响]
3 storm可以发布多个流【申明,赋值,emit】4 一个拓扑可以申明多个spout
4Bolt 闪电
总是订阅spout或者上游的bolt 并使用execute进行执行
订阅的时候根据流分组策略进行订阅并获取相应的元组,流分组默认有8种策略也可以扩展CustomStreamGrouping自定义
5 拓扑
执行任务的抽象,类似于mapreduce任务,但其永远不会停止除非主动杀死或意外宕掉
6 task vs executor
任务: 每个spout bolt的上进行计算的线程称为任务,一个bolt可以有多个线程,例如并行为2
builder.setBolt(BOLT_ID, splitBolt,2)
执行器:storm0.8以后 ,多个task可能共享物理线程,这个线程称为执行器
【笔者认为可能是利用线程池复用资源】