【问题标题】:Apache Storm Bolt task is not receiving message after some time一段时间后,Apache Storm Bolt 任务未收到消息
【发布时间】:2015-11-01 22:26:30
【问题描述】:

我们有一个风暴拓扑,其中我们配置了一个 spout 和两个 bolt。 Spout 不断地从 DB 中查询数据并将它的元组发送到第一个 Bolt 进行一些处理。第一个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());

【问题讨论】:

    标签: java apache-storm


    【解决方案1】:

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

    【讨论】:

    • 嗨,克里斯,我没有使用 acking 框架。风暴仍然会超时消息吗?如果消息超时,我们可以在哪里检查日志。我已经给最后一个螺栓的 30 个平行提示。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      相关资源
      最近更新 更多