问题:
大量的failed,导致storm大量重复数据。
原因:
spout的消息队列过大,bolt处理不过来,产生大量堆积。加上每条消息处理完成的最大默认时间是30S,如果30S没有处理完成就会认为失败。ack机制,不停的重复发送。
解决:
修改两个参数:
topology.message.timeout.secs: 30
topology.max.spout.pending:null
如果30秒内消息没有被处理完成,则会被认为failed,如果开启了ack机制,将会不停的重新发送。
如果处理能力比较低的话,可以把该值调大。
#maximum amont of time a message has to complete before it is considered failed
topology.message.timeout.secs: 30
一个spout task最多发送的tuple数量,应用于单个的task,而不是整个的spouts或topology。
如果处理能力比较低的话,可以把这个值调小。
这个值的大小取决于bolt的处理能力。
bolt的处理能力的阈值可以通过界面UI观察,通过消息的failed开始的数量可以计算出。
topology.max.spout.pending:null