如何在storm中跨多个Worker(jvm)共享静态字段?

n3schb8v  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(282)

我的一个螺栓上有一个静电场(计数器)。现在,如果我在集群中用不同的worker运行拓扑。每个jvm都有自己的静态字段副本。但我想要一个能让工人们共享的领域。我怎样才能做到呢?
我知道我可以将计数器持久化到某个地方,然后在每个jvm中读取并(同步)更新它。但这将是性能问题。Storm中有出路吗?

luaexgnf

luaexgnf1#

默认的storm api只提供至少一次处理保证。这可能是您想要的,也可能不是,这取决于计数器的准确性是否重要(例如,当由于辅助进程失败而重新处理元组时,计数器的增量不正确)
我认为您可以研究trident,它是一个针对storm的高级api,可以提供精确的一次处理保证,以及使用数据库或内存存储持久化状态的抽象(例如trident状态)。cassandra有一个适合您的用例的计数器列类型。
保持三叉戟状态chedhttps://github.com/nathanmarz/trident-memcached
卡萨持续的三叉戟状态ndrahttps://github.com/frostman/trident-cassandra

相关问题