重新平衡后风暴任务状态是否会转移到新的执行者身上?

时间:2014-04-09 01:44:39

标签: apache-storm

这是我在阅读后提出的一个问题: What is the "task" in Storm parallelism

如果我需要在bolt的内部状态中保留一些信息,例如,在经典的单词计数用例中,保持在hashmap中看到的每个单词的计数。执行"重新平衡"命令,许多螺栓的任务被移动到另一个执行器,它可能在另一个JVM或甚至另一台机器上。将bolt的内部状态(本例中的字数hashmap)转移到新环境(实例/ JVM /机器)吗?

当然,将字数hashmap放在像Zookeeper这样的中心位置不会有这个问题。但出于性能考虑,似乎我们有时需要将内容保存在内存中。

2 个答案:

答案 0 :(得分:6)

运行重新平衡后,将发生以下情况

  1. 首先停用当前拓扑结构
  2. 然后,它将在集群内均匀分配工作人员
  3. 然后拓扑将返回其先前的激活状态
  4. 这是Nathan Marz的comment,应该有助于消除您的疑虑。

      

    重新平衡相当于那些在另一台机器上被杀死并从头开始创建的工人。如果你想要"陈述"为了维护,我建议你使用像Trident这样的东西并保持你的状态在DFS上同步

答案 1 :(得分:0)

在风暴中我们有以下映射

风暴|现实世界 +++++++++++++++++++++
工人| Java流程
执行器|线程
任务|运行对象方法(执行等)

由于在风暴中进程(以及机器)之间没有共享内存,因此您没有共享值,例如应用程序中所有螺栓中分散的计数器。但是你可以在一个工人的执行者(线程)中拥有共享值 要处理所有执行程序中的共享值,必须使用其他工具,例如分布式缓存(Memcached,guava)或数据库。
在暴风雨中,我认为它使用zookeeper来重新平衡后恢复状态。