什么时候在 Apache Storm 中调用 spout 中的 'ack' 方法?

When is the 'ack' method in the spout called in Apache Storm?

我有一个用两个螺栓处理文档的拓扑结构。我需要能够在文档完全 processed/has 通过整个拓扑结构后修改存储在 spout 中的数据结构。在进一步了解 Apache Storm 之前,我相信在 spout 中实现的 'ack' 方法只在拓扑的末尾被调用。我现在看到 'ack' 需要在每个螺栓中调用并且很困惑。

本质上,如果我将自定义代码放在 spout 的 'ack' 方法中:它什么时候执行? 每次 'ack' 方法被调用在螺栓中或当整个元组树已 acked/once 每个元组每个喷口发出?

spout 中的 ack 方法仅在元组已被下游的所有螺栓确认后调用,而不是之前。参见 here。这意味着您的代码将在元组在整个元组树中被确认时执行。