My Storm Spout包含一个Map<Object, Foo>
消息Id对象及其正在发出的相应Foo对象。每次spout处理nextTuple()
中的消息时,带有Foo对象的消息Id都会添加到地图中。当在Spout中调用fail时,我使用消息Id对象从映射中检索Foo对象并重放消息(保证消息处理)。在确认时,我从地图中删除了该消息。
这适用于喷嘴的单个实例。我正在尝试验证如果我并行化Spout这是否会起作用,即一个消息总是被发出它的喷口干扰/失败,或者另一个spout实例可以接收ack / fail调用吗?
答案 0 :(得分:1)
如果我正确解释Storm的guaranteed message processing文档,那么发出元组的Spout将始终收到ack / fail调用:
“请注意,元组将被创建它的完全相同的Spout任务激活或失败。因此,如果Spout在集群中执行尽可能多的任务,则不会通过不同的任务执行或失败元组。创造它的人。“