Как мне измерить прошедшее время между потоками в Apache Storm? - PullRequest
0 голосов
/ 25 марта 2019

Я получаю метрики болтов и изливов Storm с помощью [codahale-metrics] и отправляю их на сервер Graphite.Как мне получить время для отправки сообщений между болтами и носиками?Например.этот код предназначен только для метрик каждого исполнителя:

import com.codahale.metrics.Histogram;
import com.codahale.metrics.Meter;
import com.codahale.metrics.Timer;

public class MqttSensorDetailSpout extends BaseRichSpout {
    private Meter tupleMeter;
    private Timer tupleTimer;
    private Histogram tupleHistogram;
    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
        this.context = context;
        this.collector = collector;
        this.tupleMeter = context.registerMeter("meterSpout-" + this.topic);
        this.tupleTimer = context.registerTimer("timerSpout-" + this.topic);
        this.tupleHistogram = context.registerHistogram("histogramSpout-" + this.topic);
    }
    public void nextTuple() {
        final Timer.Context timeContext = this.tupleTimer.time();
        this.tupleMeter.mark();
        try {
        …
        } finally {
            timeContext.stop();
        }
    }
}

Я хочу знать, сколько времени прошло для отправки сообщений между исполнителями.Как бы я это реализовал?Спасибо, Фелипе

1 Ответ

1 голос
/ 25 марта 2019

Storm не ставит метки времени сообщений, так как мы не можем точно знать, что люди настроили NTP или что-то подобное на своих серверах.Если вы хотите узнать, сколько времени занимает отправка кортежа от одного исполнителя другому, вы должны вручную добавить метку времени к отправляемым вами кортежам.Вы можете просто добавить его, как любое другое поле кортежа.Затем ваш нижестоящий болт может прочитать временную метку входного кортежа и вычислить, сколько времени потребовалось для передачи.

...