当前位置: 首页 > 知识库问答 >
问题:

Storm任务状态在重新平衡后会转移到新的执行者吗?

刘玉石
2023-03-14

这是我读完后想到的一个问题:Storm并行中的“任务”是什么

如果我需要在bolt的内部状态中保留一些信息,例如,在经典的单词计数用例中,在一个hashmap中保留在bolt中看到的每个单词的计数。执行“rebalance”命令后,将bolt的任务移到另一个执行器,该执行器可能在另一个JVM中,甚至可能在另一台机器中。bolt的内部状态(本例中的字数hashmap)是否会转移到新环境(instance/jvm/machine)?

共有1个答案

叶阳
2023-03-14

在storm中,我们有以下映射

Storm ;             真实世界

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

 类似资料:
  • 我正在尝试重新平衡正在运行的Apache Storm(0.9.5)拓扑中的bolt执行程序的数量。当我对Nimbus节点执行命令时,它接受命令行输入,但当我在Storm UI中查看时,执行者的数量不会改变。 是不是有一个限制,我没有意识到,就像再平衡不能增加执行者的总数,只能把他们从一个螺栓移动到另一个螺栓?

  • 问题:修改一个BST,使它变得尽可能平衡。不用说,你应该尽可能有效率地做这件事。 提示:面试官说这是一个合乎逻辑的问题,如果你换位思考就会得到答案。没有困难的编码涉及。 -->话虽如此,但我不认为他希望我指向AVL/RB树。 我的解决方案是:我提出,我将对树进行顺序遍历,将中间元素作为新树的根(我们称之为新根)。然后到中间元素的左边,取它的中间元素作为树的左子树的根,生成新根。同样地,正确的部分也

  • 假设我有一个包含1,000个元素和10个执行器的RDD。现在我用10个分区并行化RDD,并由每个执行器处理100个元素(假设每个执行器1个任务)。 我的困难是,其中一些分区任务可能比其他任务花费的时间要长得多,所以说8个执行器将很快完成,而剩下的2个执行器则将被困在执行时间更长的任务中。因此,主进程将等待2完成后再继续,8将处于空闲状态。 有什么方法可以让无所事事的执行者从忙碌的执行者那里“拿走”

  • 我有4个单一分区和应用程序的三个实例的主题。我试图通过编写一个自定义的PartitionGrouper来实现可伸缩性,它将创建如下3个任务: 第一个实例-topic1,分区0,topic4,分区0 第二个实例-主题2,分区0 第三实例-桌面3,分区0 我将NUM_STANDBY_REPLICAS_CONFIG配置为1,因为它将在本地维护状态(也可以消除invalidstatestore异常)。 上

  • 我用的是Kafka:2.11-1.0.1。应用程序包含主题“X”的并发性为5的使用者,分区为5。 重新启动应用程序并在分区分配之前在主题“X”上发布消息时,主题“X”的5个使用者会找到组协调器,并将加入组请求发送给组协调器。预计会收到小组协调员的回复,但未收到回复。 我检查了Kafka服务器日志,但在调试日志级别找不到相关日志。 当我运行描述消费者组的命令时,作出如下观察: 消费群体正在重新平衡