同一个Storm spout是否并行接收acked / failed消息

时间:2015-11-30 16:44:36

标签: java parallel-processing apache-storm

My Storm Spout包含一个Map<Object, Foo>消息Id对象及其正在发出的相应Foo对象。每次spout处理nextTuple()中的消息时,带有Foo对象的消息Id都会添加到地图中。当在Spout中调用fail时,我使用消息Id对象从映射中检索Foo对象并重放消息(保证消息处理)。在确认时,我从地图中删除了该消息。

这适用于喷嘴的单个实例。我正在尝试验证如果我并行化Spout这是否会起作用,即一个消息总是被发出它的喷口干扰/失败,或者另一个spout实例可以接收ack / fail调用吗?

1 个答案:

答案 0 :(得分:1)

如果我正确解释Storm的guaranteed message processing文档,那么发出元组的Spout将始终收到ack / fail调用:

“请注意,元组将被创建它的完全相同的Spout任务激活或失败。因此,如果Spout在集群中执行尽可能多的任务,则不会通过不同的任务执行或失败元组。创造它的人。“