我想在Storm喷口的缓存中刷新状态。我能成功地在螺栓与滴答元组。如果知道是否有类似的模式可以使用,或者有其他的方法可以周期性地醒来并做一些事情,那将是很棒的。我可能会有一个计时器来做这件事。这会导致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将从同一线程调用喷口上的所有方法。
如果您决定使用计时器或类似的工具,您将需要确保您的缓存在计时器线程和常规Storm executor线程之间是同步的。
我使用storm0.9.4和storm-kafka:0.9.0-wip16a-scala292作为从kafka0.7读取的依赖项。 我们的Kafka保留政策是7天。 我从经纪人的最新偏移量开始读取。
这里可能发生了同样的事情:错误backtype.storm.util-Async循环死亡!BufferUnderFlowException:null,但我将添加一个完整的堆栈跟踪和一些更多的上下文。 Storm版本-9.3 Storm-Kafka版本-9.3 Kafka版本-0.8.2-beta 堆栈跟踪: Spout代码(注意,出于调试目的,我使用的是一个静态定义的分区映射,只有一个代理):
这是一个关于Storm的max spout pending如何工作的问题。我目前有一个spout读取一个文件,并为文件中的每一行发出一个元组(我知道Storm不是处理文件的最佳解决方案,但对于这个问题我没有选择)。 我将设置为50K,以限制进入要处理的拓扑的元组数量。然而,我看到这个数字在拓扑中没有任何影响。我每次都看到一个文件中的所有记录被发出。我猜测这可能是由于方法中的循环所致,该方法发出文件
我对Apache Storm的性能有一个问题,主要是从喷口出来的。 我有一个从kestrel队列发出项目的拓扑。我获取大约2000个项目,每次在喷注中调用时,我都会发出一个。 我正在使用1个spout任务和1个spout执行器运行。我已将设置为10。 为什么每次调用之间有这么大的时间间隔?outputCollector在发出一个新元组之前是否正在等待听到每个元组的反馈? 我正在运行Java8和st
我理解是使用实现背压的一种简单方法。我想明白,现在背压已经实现了,我们还需要来节流喷口吗? 谢谢!