请在下面找到Storm拓扑的统计数据。
相关信息:
以下是我的问题:
有谁能帮助我理解这里可能出现的问题。我最初的猜测是:
答案 0 :(得分:1)
你的元组确实超时。
查看平均完整延迟49秒。这意味着平均每个元组在拓扑内花费48秒没有被任何螺栓处理(如果用螺栓求平均执行时间小于1秒......而49-1 = 48)。
在您的情况下,解决方案是在拓扑中同时更改元组的数量。因此,您应该将topology.max.spout.pending
更改为低于5000的值。您应该尝试多个值,但我认为1000可能会有效。
关于第一个螺栓上缺少的元组。你确定每个传入的元组会产生另一个元组吗?
你唯一要说的是,你会发现元组失败,你总是为你收到的每个元组产生一个元组吗?
答案 1 :(得分:0)
Spout 1的完整延迟为49秒,即使螺栓的执行延迟小于一秒。这告诉我你在某个地方有积压。如果你的超时时间足够短,你就会有消息超时并且没有回到鲸鱼喷口,然后重新提交它们,使得积压更糟。
答案 2 :(得分:0)
您是否尝试过打开/关闭系统统计信息?这也包括或排除了蜱元组。这样你就可以得到除了蜱元组之外的实际元组数。此外,您可以尝试增加元组的超时,以避免多次发送它们。
答案 3 :(得分:0)
元组失败只有两种方式。要么,方法OutputCollector.fail(...)
由Bolt或元组中的用户代码调用超时。为Spout显示的值“Complete Latency”是平均值值。因此,绝对有意义的是,大多数显示为失败的元组都会进入超时状态,因为用户代码只有3个元组失败。
关于发出和确认的元组计数:UI中报告的计数并不总是精确的。即使Storm在内部正确计数,UI也不会显示精确值,因为计数器是逐个收集的。因此,在收集阶段,计数器之间会发生变化,并且UI不会获得计数值的整体一致性快照。
参数topology.max.spout.pending
可能是相关的。减少它应该降低元组进入超时的机会。增加超时值本身可能没有帮助(因为你声称它已经“相当高” - 无论这意味着什么)。
但是,如果有网络问题,很难说。如果日志中没有错误消息,则网络应该没问题。