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

Does same Storm spout receive acked/failed message in parallel

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

这适用于 spout 的单个实例。我正在尝试验证如果我将 Spout 并行化这是否会起作用,即消息是否总是由发出它的 spout acked/failed 或者 spout 的另一个实例是否可以接收 ack/fail 调用?

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

"Note that a tuple will be acked or failed by the exact same Spout task that created it. So if a Spout is executing as many tasks across the cluster, a tuple won't be acked or failed by a different task than the one that created it."