Apache storm 喷嘴故障,螺栓无故障

Apache storm 喷嘴故障,螺栓无故障,apache-storm,Apache Storm,请在下面找到风暴拓扑的统计信息 相关信息: spout1将所有元组发送到bolt1 bolt1执行额外的tick元组(这就是为什么它与从spout1发出的元组数不匹配) 以下是我的问题: 喷口中有1059个故障,而一个下游螺栓中只有3个故障 从spout1发出的元组数与bolt1返回的元组数不匹配(我已经检查了代码,每个进入bolt1的元组都会确认或失败) 有人能帮我理解这里可能出了什么问题吗。我最初的猜测是: topology.max.spout.pending设置为20000。这可能

请在下面找到风暴拓扑的统计信息

相关信息:

  • spout1将所有元组发送到bolt1
  • bolt1执行额外的tick元组(这就是为什么它与从spout1发出的元组数不匹配)
以下是我的问题:

  • 喷口中有1059个故障,而一个下游螺栓中只有3个故障
  • 从spout1发出的元组数与bolt1返回的元组数不匹配(我已经检查了代码,每个进入bolt1的元组都会确认或失败)
  • 有人能帮我理解这里可能出了什么问题吗。我最初的猜测是:

    • topology.max.spout.pending设置为20000。这可能会导致某种缓冲区溢出。(但如果发生这种溢出,螺栓不会报告故障吗?)
    • 是否存在任何可能导致元组无法到达螺栓的网络问题

    喷口1的完整延迟为49秒,即使螺栓的执行延迟小于一秒。这告诉我你有一个积压的地方。如果超时时间足够短,则会有消息超时并返回到重新提交它们的喷口,从而使积压工作变得更糟。

    您是否尝试过打开/关闭系统统计信息?它还包括或排除已确认的勾号元组。这样,您可以得到实际的元组数,而不是滴答元组。您还可以尝试增加元组的超时时间,以避免多次发送它们。

    元组失败的方式只有两种。方法
    OutputCollector.fail(…)
    由用户代码在螺栓或元组超时内调用。为喷口显示的“完全延迟”值是平均值。因此,显示为failed的大多数元组都会超时,因为只有3个元组被用户代码失败,这是完全有道理的

    关于发出和确认的元组计数:UI中报告的计数并不总是精确的。即使Storm在内部正确计数,UI也不会显示精确的值,因为计数器是逐个收集的。因此,在收集阶段,计数器会在这两个阶段之间发生变化,UI无法获得计数值的总体一致性快照

    参数
    topology.max.spout.pending
    可能相关。减少它应该可以降低元组超时的可能性。增加超时值本身可能没有帮助(因为您声称它已经“相当高”——不管这意味着什么)


    很难说是否存在网络问题。如果日志中没有错误消息,网络应该正常。

    您的元组确实超时了

    看看你的平均完成延迟49秒。这意味着每个元组在拓扑中平均花费48秒,没有被任何螺栓处理(如果螺栓的平均执行时间之和小于1秒…且49-1=48)

    本例中的解决方案是同时更改拓扑内部的元组数。因此,您应该将topology.max.spout.pending更改为低于5000的值。您应该尝试几个值,但我认为1000可能会奏效

    在您询问之前,增加元组超时不是解决方案。 关于螺栓一上缺失的元组。您确定会为每个传入的元组生成另一个元组吗


    您声明的唯一一件事是您将确认元组失败,您是否总是为收到的每个元组生成一个元组?

    感谢您的回复。元组的超时已经相当高了。那么这是否意味着我应该减少拓扑。max.spout.pending?谢谢Chris的回复。我设置的超时值很高。超时值设置为多少?