Storm UI不显示正确的acked

时间:2017-03-23 15:21:13

标签: java apache-kafka apache-storm

我将Apache Storm 1.0.3与Apache Kafka_2.11-0.10.1.0集成在一起。 Storm正确地从kafka主题中读取了一两篇文章,但是当第一个螺栓激活了元组时,这个acked在Storm UI中没有显示。有什么问题?

其他问题: 当Storm从kafka主题中读取十或十九条消息时,在那一点上Storm UI显示了20个为Bolt做出的消息,如果读取了其他一组19条消息,则会增加20多个消息。我不明白为什么Storm UI显示Spout和螺栓的20分20秒。 任何人都可以解释一下在Storm Ui控制台中注册和失败的逻辑是什么?。

我的拓扑结构是:

final TopologyBuilder myTopology = new TopologyBuilder();

KafkaConfiguration kconfig = new KafkaConfiguration();
SpoutConfig spout = kconfig.getKafkaConfiguration( args[0], args[1], args[2], args[3]);

myTopology.setSpout("spoutMvClient", new KafkaSpout(spout), 5);
myTopology.setBolt("boltTransformToObject", new TransformBolt(),7).globalGrouping("spoutMvClient");
myTopology.setBolt("boltMVClient", new MvClientBolt(), 6).fieldsGrouping("boltTransformToObject",new Fields("objectTarget"));

Config conf = new Config();
conf.setMaxSpoutPending(5000);
try {
    StormSubmitter.submitTopology( "topologyOne", conf, myTopology.createTopology());
} catch (AlreadyAliveException e) {
        e.printStackTrace();
}

我的第一个TransformBolt Bolt是:

 public void execute(Tuple input) {

     try {
          LOG.info(input.getString(0));
          Transform transform = new Transform();
          OpenTarget openTarget = transform.getObjetGenericFromFileXml(input.getString(0));

          collector.emit(input, new Values(openTarget));    
          collector.ack(input);     

        } catch (Exception e) {
            LOG.error(e.getMessage());
            collector.fail(input);  
        }
 }

1 个答案:

答案 0 :(得分:1)

经过调查,我了解风暴是如何通过Storm UI来挑战他们的元组和节目的。 有一个默认配置允许在风暴UI中显示已确认的号码:

enter image description here

此配置仅测量并显示5%的数据流。如果我们需要显示特定喷口或螺栓确认或失败的元组数,我们必须将此配置更改为:

config.setStatsSampleRate(1.0d);

就像:

  Config conf = new Config();
  conf.setMaxSpoutPending(5000);
  conf.setStatsSampleRate(1.0d);

        try {
            StormSubmitter.submitTopology( "topologyOne", conf, myTopology.createTopology());
        } catch (AlreadyAliveException e) {
            e.printStackTrace();
        }

然后风暴UI开始计数并正确显示拓扑上发生的数字:

enter image description here

最后,这是我的另一个问题: Storm latency caused by ack