风暴喷发周期性逻辑
Storm Spout Periodic logic
我想在 Storm spout 的缓存中刷新状态。我可以在带有 Tick 元组的螺栓中成功做到这一点。很高兴知道是否有类似的模式可供使用或以其他方式定期唤醒并做某事。我可能有一个计时器来做这件事。这会导致 Storm 框架出现任何并发问题吗?
我不相信有任何内置的东西,但看看我们如何在 Kafka spout 中提交 https://github.com/apache/storm/blob/fbeafdcbb1e4be1263b91be7ba75a15aa6e885a8/external/storm-kafka-client/src/main/java/org/apache/storm/kafka/spout/KafkaSpout.java#L278。
基本上我们在提交的时候设置一个时间戳,然后在调用nextTuple的时候检查时间戳。如果时间戳在过去足够久,我们提交并重置时间戳。
这样做意味着您不必担心并发问题。 Storm 将从同一个线程调用 spout 上的所有方法。
如果您决定使用 Timer 或类似的东西,您将需要确保您的缓存在 Timer 线程和常规 Storm 执行器线程之间同步。
我想在 Storm spout 的缓存中刷新状态。我可以在带有 Tick 元组的螺栓中成功做到这一点。很高兴知道是否有类似的模式可供使用或以其他方式定期唤醒并做某事。我可能有一个计时器来做这件事。这会导致 Storm 框架出现任何并发问题吗?
我不相信有任何内置的东西,但看看我们如何在 Kafka spout 中提交 https://github.com/apache/storm/blob/fbeafdcbb1e4be1263b91be7ba75a15aa6e885a8/external/storm-kafka-client/src/main/java/org/apache/storm/kafka/spout/KafkaSpout.java#L278。
基本上我们在提交的时候设置一个时间戳,然后在调用nextTuple的时候检查时间戳。如果时间戳在过去足够久,我们提交并重置时间戳。
这样做意味着您不必担心并发问题。 Storm 将从同一个线程调用 spout 上的所有方法。
如果您决定使用 Timer 或类似的东西,您将需要确保您的缓存在 Timer 线程和常规 Storm 执行器线程之间同步。