如何在风暴中跨越各种工作者(JVM)共享静态字段?

时间:2015-10-28 12:13:13

标签: static jvm apache-storm worker

我的一个螺栓中有一个静态场(计数器)。现在,如果我在群集中运行具有各种worker的拓扑。每个JVM都将拥有自己的静态字段副本。但是我想要一个可以由工人共享的字段。我怎么能做到这一点?

我知道我可以将计数器保存在某个地方并在每个JVM中读取并更新它(同步)。但那将是性能问题。通过风暴有什么出路吗?

1 个答案:

答案 0 :(得分:1)

默认的Storm api仅提供至少一次处理保证。根据计数器的准确性是否重要(例如,由于工人故障而重新处理元组,计数器增加不正确),这可能是您想要的,也可能不是您想要的。

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

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

在Cassandra持续三叉戟状态 https://github.com/Frostman/trident-cassandra