繁体   English   中英

一段时间后,Apache Storm Bolt任务未收到消息

[英]Apache Storm Bolt task is not receiving message after some time

我们有一个风暴拓扑,我们在其中配置了一个喷口和两个螺栓。 Spout不断地从DB查询数据,并将元组发送到第一个bolt进行一些处理。 第一个bolt执行一些处理并将元组发送到第二个bolt,它调用第三方Web服务并发送数据。 那么,经过一段时间后发生了什么,最后一个螺栓没有得到任何元组,如果我们重新启动拓扑它工作正常。 这里只有最后一个螺栓有问题。 其他喷口和第一个螺栓运行正常,我没有使用acking框架。 在这种情况下,我只配置了一个工作人员。

TopologyBuilder builder = new TopologyBuilder();
    builder.setSpout("messageListenrSpout", new MessageListenerSpout(), 1);
    builder.setBolt("processorBolt", new ProcessorBolt(), 20).shuffleGrouping("messageListenrSpout");
    builder.setBolt("notifierBolt", new NotifierBolt(),40).shuffleGrouping("processorBolt");
    Config conf = new Config();
        conf.put(Config.TOPOLOGY_SLEEP_SPOUT_WAIT_STRATEGY_TIME_MS, 10000);
        //conf.setMessageTimeoutSecs(600);
        conf.setDebug(true);
        StormSubmitter.submitTopology(TOPOLOGY, conf, builder.createTopology());

你很可能遇到导致超时的积压元组问题。 尝试增加第二个螺栓的平行度提示,因为它听起来像一个人的处理时间比第一个螺栓的处理时间长得多(这就是为什么会有积压进入第二个螺栓的原因)。 如果您在群集上运行此拓扑,请查看Storm UI以查看详细信息。

伙计们,当我调试我的拓扑时,我发现如果让我们说spout正在快速发送消息但是bolt处理速度很慢。 在这种情况下,消息将排队LMAX Disruptor Queue。 然后spout task等待它为空。 如果你进行线程转储,你会发现线程处于TIMED_WAITING状态。 因此,我们需要以保持流入和流出的方式配置拓扑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM