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发出的元组数不匹配)
- topology.max.spout.pending设置为20000。这可能会导致某种缓冲区溢出。(但如果发生这种溢出,螺栓不会报告故障吗?)
- 是否存在任何可能导致元组无法到达螺栓的网络问题
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的回复。我设置的超时值很高。超时值设置为多少?