在我们的风暴1.0.2应用程序中,我们面临内存异常。在调试时我们看到Kafka喷口向螺栓发出了太多消息。螺栓的运行能力接近4.0。那么有没有办法在暴风雨中启用背压,以便喷口根据螺栓的容量发出。尝试将topology.backpressure.enable设置为true,但遇到了此问题https://issues.apache.org/jira/browse/STORM-1949。我们正在使用KafkaSpout的开箱即用实现并为我们的螺栓扩展BaseRichBolt。我们的DAG是线性的。
答案 0 :(得分:5)
您可以通过在拓扑配置中设置 maxSpoutPending 值来处理KafkaSpout的背压,
Config config = new Config();
config.setMaxSpoutPending(200);
config.setMessageTimeoutSecs(100);
StormSubmitter.submitTopology("testtopology", config, builder.createTopology());
maxSpoutPending是在给定时间拓扑中可以挂起确认的元组数。设置此属性,将使KafkaSpout不再使用来自Kafka的更多数据,除非未确认的元组计数小于maxSpoutPending值。