分享

求助:storm的spout出现failed情况

骑士叔叔 发表于 2017-4-26 14:42:05 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 6 9389
在storm运行时期,发现某个spout存在大量failed情况,从而造成其余spout处理变得很慢,最高造成了38分钟的延时。想请教问下,某个spout的failed情况,为何会导致其余的spout缓慢?

已有(6)人评论

跳转到指定楼层
einhep 发表于 2017-4-26 14:55:20
bolt处理延时过高,处理速度缓慢,导致spout发射的Tuple堆积过多,很多Tuple在超时时间内没有被bolt处理.所以可能会造成这样的结果。
关键是找到那一个慢的原因。

回复

使用道具 举报

einhep 发表于 2017-4-26 14:59:55
这有个类似例子,可以参考

spout Failed 问题失败分析及解决方案

回复

使用道具 举报

骑士叔叔 发表于 2017-4-26 15:22:14
einhep 发表于 2017-4-26 14:55
bolt处理延时过高,处理速度缓慢,导致spout发射的Tuple堆积过多,很多Tuple在超时时间内没有被bolt处理.所 ...

感谢您的答复,那个链接我也看到过,但是我还有一些困惑:
由于spout对应的是多个,由于一个超时为何会影响其余的spout呢?
我理解的是单个超时了只会影响其自己,其余的spout应该会继续发射。是什么机制造成这个原因呢?
回复

使用道具 举报

muyannian 发表于 2017-4-26 15:42:20
骑士叔叔 发表于 2017-4-26 15:22
感谢您的答复,那个链接我也看到过,但是我还有一些困惑:
由于spout对应的是多个,由于一个超时为何会 ...

这个跟编程有关系。
用的是可靠的spout还是不关心是否成功和失败。
Spout其中两个方法nextTuple和ack方法,是在同一个线程中被执行的,因此不能在nextTuple或ack方法里block住当前线程,这样将直接影响spout的处理速度,很关键。

回复

使用道具 举报

z574438205 发表于 2017-9-30 11:33:31
spout 和 bolt是交叉对应关系
你其中一个spout出现大量失败,就会造成数据重复发送,然后造成bolt的压力过大
同时bolt压力过大,就导致其他spout在发送给bolt时缓慢的问题
如果spout源数据生产效率远高于bolt的处理效率,那么需要给spout设置最大pending数,以防止数据大量堆积,造成大量fail的情况
conf.setMaxSpoutPending(10000);//设置spout最大发送的消息数量,防止爆发性队列增长
回复

使用道具 举报

骑士叔叔 发表于 2017-10-13 10:16:56
z574438205 发表于 2017-9-30 11:33
spout 和 bolt是交叉对应关系
你其中一个spout出现大量失败,就会造成数据重复发送,然后造成bolt的压力过 ...

假如spout队列处于爆满状态,并且failed现象暂不处理,是因为bolt连接db时超时造成的(可能db服务器宕机),等待连接恢复后,spout的数据是否还会再次被处理?目前遇到这种情况,导致集群不再进行数据处理,可能需要重启storm集群才能恢复
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条