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

Storm max喷口挂起

公西承
2023-03-14

这是一个关于Storm的max spout pending如何工作的问题。我目前有一个spout读取一个文件,并为文件中的每一行发出一个元组(我知道Storm不是处理文件的最佳解决方案,但对于这个问题我没有选择)。

我将topology.max.spout.pending设置为50K,以限制进入要处理的拓扑的元组数量。然而,我看到这个数字在拓扑中没有任何影响。我每次都看到一个文件中的所有记录被发出。我猜测这可能是由于NextTuple()方法中的循环所致,该方法发出文件中的所有记录。

我的问题是:当到达topology.max.Spout.pending时,Storm是否只是停止为Spout任务调用NextTuple()?这是否意味着每次调用方法时我只应该发出一个元组?

共有1个答案

姬旭
2023-03-14

没错!暴风只能用下一个命令限制你的喷口,所以如果你在收到第一个下一个的时候把所有东西都传送出去,暴风就没有办法节流你的喷口了。

Storm开发人员建议使用单个next命令发出单个元组。Storm框架将根据需要节流你的喷口,以满足“最大喷口待定”的要求。如果您发射的元组数量很高,您可以将您的发射批处理至多为您的最大喷出挂起的十分之一,以给Storm一个节流的机会。

 类似资料:
  • 刚开始使用Storm,只是了解喷口的概念,以及如何在喷口中实现并行。

  • 我使用storm0.9.4和storm-kafka:0.9.0-wip16a-scala292作为从kafka0.7读取的依赖项。 我们的Kafka保留政策是7天。 我从经纪人的最新偏移量开始读取。

  • 这里可能发生了同样的事情:错误backtype.storm.util-Async循环死亡!BufferUnderFlowException:null,但我将添加一个完整的堆栈跟踪和一些更多的上下文。 Storm版本-9.3 Storm-Kafka版本-9.3 Kafka版本-0.8.2-beta 堆栈跟踪: Spout代码(注意,出于调试目的,我使用的是一个静态定义的分区映射,只有一个代理):

  • 我对Apache Storm的性能有一个问题,主要是从喷口出来的。 我有一个从kestrel队列发出项目的拓扑。我获取大约2000个项目,每次在喷注中调用时,我都会发出一个。 我正在使用1个spout任务和1个spout执行器运行。我已将设置为10。 为什么每次调用之间有这么大的时间间隔?outputCollector在发出一个新元组之前是否正在等待听到每个元组的反馈? 我正在运行Java8和st

  • 我理解是使用实现背压的一种简单方法。我想明白,现在背压已经实现了,我们还需要来节流喷口吗? 谢谢!

  • 我已经开始使用storm,所以我使用本教程创建简单的拓扑 我的嘴是这样的 我的螺栓是这样的