如何使用Storm的New Metrics Reporting API?

时间:2018-10-18 08:09:19

标签: apache-kafka apache-storm

我使用风暴V1.2.1。根据官方文档进行设置后,我想在喷口中获取一些指标,喷口代码如下,但是石墨网中没有预期的指标数据。

问题1 :如何正确使用New Metrics Reporting API?

问题2 :如何通过使用Storm的旧度量标准或新Metrics API在受风暴约束的KafkaSpout中获得ACK数字度量标准?

在spout中使用New API获取元组编号:

      public static class MyTestWordSpout extends BaseRichSpout {
            public static Logger LOG = LoggerFactory.getLogger(TestWordSpout.class);
            boolean _isDistributed;
            SpoutOutputCollector _collector;
            private Counter tupleCounter;
            transient CountMetric ackcountMetric;
            long msid=0;


            public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
                _collector = collector;
                this.tupleCounter = context.registerCounter("tupleCount");
                ackcountMetric = new CountMetric();
                context.registerMetric("ack_count", ackcountMetric, 5);
            }

            public void close() {

            }

            public void nextTuple() {
                Utils.sleep(100);
                final String[] words = new String[] {"nathan", "mike", "jackson", "golda", "bertels"};
                final Random rand = new Random();
                final String word = words[rand.nextInt(words.length)];
                _collector.emit(new Values(word),msid++);
                this.tupleCounter.inc();

            }

            public void ack(Object msgId) {
                  ackcountMetric.incr();
            }

            public void fail(Object msgId) {

            }

            public void declareOutputFields(OutputFieldsDeclarer declarer) {
                declarer.declare(new Fields("word"));
            }
        }

storm.yaml:

storm.metrics.reporters:
  # Graphite Reporter
  - class: "org.apache.storm.metrics2.reporters.GraphiteStormReporter"
    daemons:
        - "supervisor"
        - "nimbus"
        - "worker"
    report.period: 1
    report.period.units: "SECONDS"
    graphite.host: "10.11.6.79"
    graphite.port: 2003
  - class: "org.apache.storm.metrics2.reporters.ConsoleStormReporter"
    daemons:
        - "worker"
    report.period: 1
    report.period.units: "SECONDS"

石墨浏览器: graphite browser

1 个答案:

答案 0 :(得分:0)

您可以使用此库https://github.com/staslev/storm-metrics-reporter。将此添加到您的pom.xml

<dependency>
  <groupId>com.github.staslev</groupId>
  <artifactId>storm-metrics-reporter</artifactId>
  <version>1.5.0</version>
</dependency>

将此配置添加到您的拓扑:

config.put(YammerFacadeMetric.FACADE_METRIC_TIME_BUCKET_IN_SEC, 30);
        config.put(SimpleGraphiteStormMetricProcessor.GRAPHITE_HOST, "127.0.0.1");
        config.put(SimpleGraphiteStormMetricProcessor.GRAPHITE_PORT, 2003);
        config.put(SimpleGraphiteStormMetricProcessor.REPORT_PERIOD_IN_SEC, 10);
        config.put(Config.TOPOLOGY_NAME, YOUR-TOPOLOGY.class.getCanonicalName());
        config.registerMetricsConsumer(MetricReporter.class,
                new MetricReporterConfig(".*", SimpleGraphiteStormMetricProcessor.class.getCanonicalName()), 1);

并将以下调用添加到螺栓的prepare方法中:

public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
        StormYammerMetricsAdapter.configure(stormConf, context, new MetricsRegistry());

然后,您可以在浏览器上查看Graphite是否显示指标。 enter image description here