我将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);
}
}
答案 0 :(得分:1)
经过调查,我了解风暴是如何通过Storm UI来挑战他们的元组和节目的。 有一个默认配置允许在风暴UI中显示已确认的号码:
此配置仅测量并显示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开始计数并正确显示拓扑上发生的数字:
最后,这是我的另一个问题: Storm latency caused by ack