我的一个螺栓上有一个静电场(计数器)。现在,如果我在集群中用不同的worker运行拓扑。每个jvm都有自己的静态字段副本。但我想要一个能让工人们共享的领域。我怎样才能做到呢?我知道我可以将计数器持久化到某个地方,然后在每个jvm中读取并(同步)更新它。但这将是性能问题。Storm中有出路吗?
luaexgnf1#
默认的storm api只提供至少一次处理保证。这可能是您想要的,也可能不是,这取决于计数器的准确性是否重要(例如,当由于辅助进程失败而重新处理元组时,计数器的增量不正确)我认为您可以研究trident,它是一个针对storm的高级api,可以提供精确的一次处理保证,以及使用数据库或内存存储持久化状态的抽象(例如trident状态)。cassandra有一个适合您的用例的计数器列类型。保持三叉戟状态chedhttps://github.com/nathanmarz/trident-memcached卡萨持续的三叉戟状态ndrahttps://github.com/frostman/trident-cassandra
1条答案
按热度按时间luaexgnf1#
默认的storm api只提供至少一次处理保证。这可能是您想要的,也可能不是,这取决于计数器的准确性是否重要(例如,当由于辅助进程失败而重新处理元组时,计数器的增量不正确)
我认为您可以研究trident,它是一个针对storm的高级api,可以提供精确的一次处理保证,以及使用数据库或内存存储持久化状态的抽象(例如trident状态)。cassandra有一个适合您的用例的计数器列类型。
保持三叉戟状态chedhttps://github.com/nathanmarz/trident-memcached
卡萨持续的三叉戟状态ndrahttps://github.com/frostman/trident-cassandra