Apache storm 风暴消息失败

Apache storm 风暴消息失败,apache-storm,Apache Storm,最近我遇到了一个非常奇怪的问题。风暴群有3台机器。拓扑结构是这样的,Kafka喷出A->Bolt B->Bolt C。我已经确认了每个Bolt中的所有元组,即使可能会在内部Bolt中抛出异常(在Bolt execute方法中,我尝试捕获所有异常,最后确认元组)。 但奇怪的事情发生了。我打印了喷口的日志,在一台机器上打印了喷口打包的所有元组,但在另外两台机器上,几乎所有元组都失败了。60秒后,元组一次又一次地重放“几乎”意味着在开始时,其他两台机器上的所有元组都失败了。过了一段时间,两台机器上出现

最近我遇到了一个非常奇怪的问题。风暴群有3台机器。拓扑结构是这样的,Kafka喷出A->Bolt B->Bolt C。我已经确认了每个Bolt中的所有元组,即使可能会在内部Bolt中抛出异常(在Bolt execute方法中,我尝试捕获所有异常,最后确认元组)。 但奇怪的事情发生了。我打印了喷口的日志,在一台机器上打印了喷口打包的所有元组,但在另外两台机器上,几乎所有元组都失败了。60秒后,元组一次又一次地重放“几乎”意味着在开始时,其他两台机器上的所有元组都失败了。过了一段时间,两台机器上出现了少量的元组

由于超时,元组绝对失败。但我真的不知道他们为什么超时。根据我打印的日志,我确信所有元组都在每个螺栓的execute方法末尾打包。所以我想知道为什么有些元组在这两台机器上失败了


我能做些什么来找出拓扑或风暴群的问题吗?非常感谢并希望您的回复。

您的问题与卡夫卡斯波特在StormTopology中处理背压有关

您可以通过在拓扑配置中设置maxSpoutPending值来处理KafkaSpout的背压

Config config = new Config();
config.setMaxSpoutPending(200); 
config.setMessageTimeoutSecs(100);

StormSubmitter.submitTopology("testtopology", config, builder.createTopology());
maxSpoutPending是在给定时间拓扑中可以挂起确认的元组数。设置此属性,将通知KafkaSpout不要使用来自Kafka的任何更多数据,除非未确认的元组计数小于maxSpoutPending值

此外,请确保您可以微调螺栓,使其尽可能轻量级,以便元组在超时之前得到确认