如何在风暴中在不同的工作者(JVM)之间共享静态字段



我的一个螺栓中有一个静态字段(计数器)。现在,如果我在集群中使用各种worker运行拓扑结构。每个JVM都将有自己的静态字段副本。但我想要一个可以让工人共享的领域。我怎样才能做到这一点?

我知道我可以将计数器保存在某个地方,并在每个JVM中读取它并(同步)更新它。但这将是性能问题。有办法穿过风暴吗?

默认的StormApi只提供至少一次处理保证。这可能是你想要的,也可能不是,这取决于计数器的准确性是否重要(例如,当由于工作人员故障而重新处理元组时,计数器的增量不正确)

我认为您可以研究Trident,它是Storm的高级API,可以提供精确的一次处理保证和使用数据库或内存存储持久化状态的抽象(例如Trident State)。Cassandra有一个计数器的列类型,可能适合您的用例。

在memcached中保持三叉戟状态https://github.com/nathanmarz/trident-memcached

在卡桑德拉保持三叉戟状态https://github.com/Frostman/trident-cassandra

最新更新