这是参考Storm's OutputCollector及其ack(Tuple)
和fail(Tuple)
方法。
这两种方法都只是将调用转移到_delegate
类型的IOutputCollector
字段。
但是在看到IOutputCollector的类型层次结构时,似乎没有任何实现该接口的类可以对这些方法做一些有用的事情。
CoordinatedOutputCollector
和AnchoringOutputCollector
似乎正在针对自己的用例执行某些操作。
如果我使用已确认的元组运行具有至少一次传递语义的拓扑,那么使用什么类型的输出收集器?
或者更一般地说,OutputCollector如何在Storm中工作?
当Tuples从一个执行程序发送到另一个执行程序时,会涉及LMAX-disruptor队列和netty-callback。但是tuple-progression就像一个向前流,而ack()
/ fail()
是向后流(因为(N+1)th
螺栓acks /失败元组到它前面的Nth
螺栓,一直到喷口)。
是否有关于如何使用OutputCollectors的好教程/博客?
答案 0 :(得分:1)
BoltOutputCollectorImpl正是您要找的。 ack
和fail
条消息都会发送到Acker bolt。当阿克尔及时收到所有螺栓的响应时,它会发出一条确认信息给鲸鱼喷水;否则,它将发回失败消息。
您可能还想结帐SpoutOutputCollectorImpl,SpoutExecutor和BoltExecutor以获取完整的流程。
请注意,以上链接来自Apache Storm trunk,版本为2.0.0-SNAPSHOT,尚未发布。对于以前的Storm版本,OutputCollector
的实现在Clojure中。