storm ui上emit和transferred的区别

最开始对stormui上展示出来的emit和transferred数量不是很明白,于是在storm-user上google了一把,发现有人也有跟我一样的困惑,nathan做了详细的回答:

emitted栏显示的数字表示的是调用OutputCollector的emit方法的次数.

transferred栏显示的数字表示的是实际tuple发送到下一个task的计数.

如果一个boltA使用allgroup的方式(每一个bolt都要接收到)向boltB发射tuple,此时boltB启动了5个task,那么trasferred显示的数量将是emitted的5倍.

如果一个boltA内部执行了emit操作,但是没有指定tuple的接受者,那么transferred将为0.

这里还有关于spout,bolt之间的emitted数量的关系讨论,也解释了我的一些疑惑:

有的bolt的execture方法中并没有emittuple,但是stormui中依然有显示emitted,主要是因为它调用了ack方法,而该方法将emitacktuple到系统默认的ackerbolt.因此如果anchor方式emit一个tuple,emitted一般会包含向ackerbolt发射tuple的数量.

另外collector.emit(newValues(xxx))和collector.emit(tuple,newValues(xxx))这两种不同的emit方法也会影响后面bolt的emitted和transferred,如果是前者,则后续bolt的这两个值都是0,因为前一个emit方法是非安全的,不再使用acker来进行校验.

相关推荐