首页 > 解决方案 > Apache Strom 从 1.0.3 升级到 2.2.0 并没有使用所有的 worker

问题描述

我正在从 Apache Storm 1.0.3 升级到 2.2.0 并面临一个特殊的问题,即拓扑任务并未在所有工作人员上运行,并且仅在与 Spout 相同的工作人员上运行。

我正在使用 shuffleGrouping 并在 2 个螺栓和 1 个喷口中配置了 6 个工作人员和总共 51 个执行程序。当我启动拓扑时,所有 6 个工作人员都按预期启动,但只有一个带喷口的工作人员正在完成所有工作。

我需要 2.2.0 的任何特殊配置吗,我的所有拓扑都可以在 1.0.3 版本中正常工作

作为一项测试,我也在运行 Strom-starter 的 ExclamationTopology,但看到相同的问题是只有一名工人在做所有的工作。

提前感谢您的帮助。

问候,

标签: apache-stormapache-storm-topologystorm-topology

解决方案


在升级到storm 2.0.0 时,我也对您观察到的行为感到困惑。原因在于您正在使用的 shuffleGrouping。根据风暴性能指南

  1. 负载感知消息

启用负载感知消息传递(默认)时,随机分组会考虑消息路由的其他因素。这对性能的影响取决于拓扑及其部署足迹(即分布在进程和机器上)。因此,评估将 topology.disable.loadaware.messaging 设置为 true 或 false 对您的特定情况的影响是有用的。

这导致 spout 将所有元组委托给它发现自己所在的同一个 worker。要修复它并返回旧行为,请在您的拓扑中设置topology.disable.loadaware.messagingtrue,例如使用

conf.put("topology.disable.loadaware.messaging", true);

推荐阅读