Search in sources :

Example 6 with Meter

use of org.apache.kafka.common.metrics.stats.Meter in project apache-kafka-on-k8s by banzaicloud.

the class StreamsMetricsImpl method addThroughputMetrics.

private void addThroughputMetrics(String scopeName, Sensor sensor, String opName, Map<String, String> tags) {
    MetricName rateMetricName = metrics.metricName(opName + "-rate", groupNameFromScope(scopeName), "The average number of occurrence of " + opName + " operation per second.", tags);
    MetricName totalMetricName = metrics.metricName(opName + "-total", groupNameFromScope(scopeName), "The total number of occurrence of " + opName + " operations.", tags);
    if (!metrics.metrics().containsKey(rateMetricName) && !metrics.metrics().containsKey(totalMetricName)) {
        sensor.add(new Meter(new Count(), rateMetricName, totalMetricName));
    } else {
        log.trace("Trying to add metric twice: {} {}", rateMetricName, totalMetricName);
    }
}
Also used : MetricName(org.apache.kafka.common.MetricName) Meter(org.apache.kafka.common.metrics.stats.Meter) Count(org.apache.kafka.common.metrics.stats.Count)

Example 7 with Meter

use of org.apache.kafka.common.metrics.stats.Meter in project apache-kafka-on-k8s by banzaicloud.

the class MetricsTest method testSimpleStats.

@Test
public void testSimpleStats() throws Exception {
    ConstantMeasurable measurable = new ConstantMeasurable();
    metrics.addMetric(metrics.metricName("direct.measurable", "grp1", "The fraction of time an appender waits for space allocation."), measurable);
    Sensor s = metrics.sensor("test.sensor");
    s.add(metrics.metricName("test.avg", "grp1"), new Avg());
    s.add(metrics.metricName("test.max", "grp1"), new Max());
    s.add(metrics.metricName("test.min", "grp1"), new Min());
    s.add(new Meter(TimeUnit.SECONDS, metrics.metricName("test.rate", "grp1"), metrics.metricName("test.total", "grp1")));
    s.add(new Meter(TimeUnit.SECONDS, new Count(), metrics.metricName("test.occurences", "grp1"), metrics.metricName("test.occurences.total", "grp1")));
    s.add(metrics.metricName("test.count", "grp1"), new Count());
    s.add(new Percentiles(100, -100, 100, BucketSizing.CONSTANT, new Percentile(metrics.metricName("test.median", "grp1"), 50.0), new Percentile(metrics.metricName("test.perc99_9", "grp1"), 99.9)));
    Sensor s2 = metrics.sensor("test.sensor2");
    s2.add(metrics.metricName("s2.total", "grp1"), new Total());
    s2.record(5.0);
    int sum = 0;
    int count = 10;
    for (int i = 0; i < count; i++) {
        s.record(i);
        sum += i;
    }
    // prior to any time passing
    double elapsedSecs = (config.timeWindowMs() * (config.samples() - 1)) / 1000.0;
    assertEquals(String.format("Occurrences(0...%d) = %f", count, count / elapsedSecs), count / elapsedSecs, metrics.metrics().get(metrics.metricName("test.occurences", "grp1")).value(), EPS);
    // pretend 2 seconds passed...
    long sleepTimeMs = 2;
    time.sleep(sleepTimeMs * 1000);
    elapsedSecs += sleepTimeMs;
    assertEquals("s2 reflects the constant value", 5.0, metrics.metrics().get(metrics.metricName("s2.total", "grp1")).value(), EPS);
    assertEquals("Avg(0...9) = 4.5", 4.5, metrics.metrics().get(metrics.metricName("test.avg", "grp1")).value(), EPS);
    assertEquals("Max(0...9) = 9", count - 1, metrics.metrics().get(metrics.metricName("test.max", "grp1")).value(), EPS);
    assertEquals("Min(0...9) = 0", 0.0, metrics.metrics().get(metrics.metricName("test.min", "grp1")).value(), EPS);
    assertEquals("Rate(0...9) = 1.40625", sum / elapsedSecs, metrics.metrics().get(metrics.metricName("test.rate", "grp1")).value(), EPS);
    assertEquals(String.format("Occurrences(0...%d) = %f", count, count / elapsedSecs), count / elapsedSecs, metrics.metrics().get(metrics.metricName("test.occurences", "grp1")).value(), EPS);
    assertEquals("Count(0...9) = 10", (double) count, metrics.metrics().get(metrics.metricName("test.count", "grp1")).value(), EPS);
}
Also used : Percentile(org.apache.kafka.common.metrics.stats.Percentile) Max(org.apache.kafka.common.metrics.stats.Max) Meter(org.apache.kafka.common.metrics.stats.Meter) Count(org.apache.kafka.common.metrics.stats.Count) Percentiles(org.apache.kafka.common.metrics.stats.Percentiles) Avg(org.apache.kafka.common.metrics.stats.Avg) Min(org.apache.kafka.common.metrics.stats.Min) Total(org.apache.kafka.common.metrics.stats.Total) Test(org.junit.Test)

Example 8 with Meter

use of org.apache.kafka.common.metrics.stats.Meter in project apache-kafka-on-k8s by banzaicloud.

the class MetricsTest method testRateWindowing.

@Test
public void testRateWindowing() throws Exception {
    // Use the default time window. Set 3 samples
    MetricConfig cfg = new MetricConfig().samples(3);
    Sensor s = metrics.sensor("test.sensor", cfg);
    MetricName rateMetricName = metrics.metricName("test.rate", "grp1");
    MetricName totalMetricName = metrics.metricName("test.total", "grp1");
    s.add(new Meter(TimeUnit.SECONDS, rateMetricName, totalMetricName));
    KafkaMetric totalMetric = metrics.metrics().get(metrics.metricName("test.total", "grp1"));
    int sum = 0;
    int count = cfg.samples() - 1;
    // Advance 1 window after every record
    for (int i = 0; i < count; i++) {
        s.record(100);
        sum += 100;
        time.sleep(cfg.timeWindowMs());
        assertEquals(sum, totalMetric.value(), EPS);
    }
    // Sleep for half the window.
    time.sleep(cfg.timeWindowMs() / 2);
    // prior to any time passing
    double elapsedSecs = (cfg.timeWindowMs() * (cfg.samples() - 1) + cfg.timeWindowMs() / 2) / 1000.0;
    KafkaMetric rateMetric = metrics.metrics().get(metrics.metricName("test.rate", "grp1"));
    assertEquals("Rate(0...2) = 2.666", sum / elapsedSecs, rateMetric.value(), EPS);
    assertEquals("Elapsed Time = 75 seconds", elapsedSecs, ((Rate) rateMetric.measurable()).windowSize(cfg, time.milliseconds()) / 1000, EPS);
    assertEquals(sum, totalMetric.value(), EPS);
}
Also used : MetricName(org.apache.kafka.common.MetricName) Meter(org.apache.kafka.common.metrics.stats.Meter) Rate(org.apache.kafka.common.metrics.stats.Rate) SimpleRate(org.apache.kafka.common.metrics.stats.SimpleRate) Test(org.junit.Test)

Example 9 with Meter

use of org.apache.kafka.common.metrics.stats.Meter in project kafka by apache.

the class MetricsTest method testRateWindowing.

@Test
public void testRateWindowing() throws Exception {
    // Use the default time window. Set 3 samples
    MetricConfig cfg = new MetricConfig().samples(3);
    Sensor s = metrics.sensor("test.sensor", cfg);
    MetricName rateMetricName = metrics.metricName("test.rate", "grp1");
    MetricName totalMetricName = metrics.metricName("test.total", "grp1");
    MetricName countRateMetricName = metrics.metricName("test.count.rate", "grp1");
    MetricName countTotalMetricName = metrics.metricName("test.count.total", "grp1");
    s.add(new Meter(TimeUnit.SECONDS, rateMetricName, totalMetricName));
    s.add(new Meter(TimeUnit.SECONDS, new WindowedCount(), countRateMetricName, countTotalMetricName));
    KafkaMetric totalMetric = metrics.metrics().get(totalMetricName);
    KafkaMetric countTotalMetric = metrics.metrics().get(countTotalMetricName);
    int sum = 0;
    int count = cfg.samples() - 1;
    // Advance 1 window after every record
    for (int i = 0; i < count; i++) {
        s.record(100);
        sum += 100;
        time.sleep(cfg.timeWindowMs());
        assertEquals(sum, (Double) totalMetric.metricValue(), EPS);
    }
    // Sleep for half the window.
    time.sleep(cfg.timeWindowMs() / 2);
    // prior to any time passing
    double elapsedSecs = (cfg.timeWindowMs() * (cfg.samples() - 1) + cfg.timeWindowMs() / 2) / 1000.0;
    KafkaMetric rateMetric = metrics.metrics().get(rateMetricName);
    KafkaMetric countRateMetric = metrics.metrics().get(countRateMetricName);
    assertEquals(sum / elapsedSecs, (Double) rateMetric.metricValue(), EPS, "Rate(0...2) = 2.666");
    assertEquals(count / elapsedSecs, (Double) countRateMetric.metricValue(), EPS, "Count rate(0...2) = 0.02666");
    assertEquals(elapsedSecs, ((Rate) rateMetric.measurable()).windowSize(cfg, time.milliseconds()) / 1000, EPS, "Elapsed Time = 75 seconds");
    assertEquals(sum, (Double) totalMetric.metricValue(), EPS);
    assertEquals(count, (Double) countTotalMetric.metricValue(), EPS);
    // Verify that rates are expired, but total is cumulative
    time.sleep(cfg.timeWindowMs() * cfg.samples());
    assertEquals(0, (Double) rateMetric.metricValue(), EPS);
    assertEquals(0, (Double) countRateMetric.metricValue(), EPS);
    assertEquals(sum, (Double) totalMetric.metricValue(), EPS);
    assertEquals(count, (Double) countTotalMetric.metricValue(), EPS);
}
Also used : MetricName(org.apache.kafka.common.MetricName) Meter(org.apache.kafka.common.metrics.stats.Meter) Rate(org.apache.kafka.common.metrics.stats.Rate) SimpleRate(org.apache.kafka.common.metrics.stats.SimpleRate) WindowedCount(org.apache.kafka.common.metrics.stats.WindowedCount) Test(org.junit.jupiter.api.Test)

Aggregations

Meter (org.apache.kafka.common.metrics.stats.Meter)9 MetricName (org.apache.kafka.common.MetricName)7 Avg (org.apache.kafka.common.metrics.stats.Avg)4 Test (org.junit.Test)4 Sensor (org.apache.kafka.common.metrics.Sensor)2 Count (org.apache.kafka.common.metrics.stats.Count)2 Max (org.apache.kafka.common.metrics.stats.Max)2 Min (org.apache.kafka.common.metrics.stats.Min)2 Percentile (org.apache.kafka.common.metrics.stats.Percentile)2 Percentiles (org.apache.kafka.common.metrics.stats.Percentiles)2 Rate (org.apache.kafka.common.metrics.stats.Rate)2 SimpleRate (org.apache.kafka.common.metrics.stats.SimpleRate)2 WindowedCount (org.apache.kafka.common.metrics.stats.WindowedCount)2 MockTime (org.apache.kafka.common.utils.MockTime)2 SystemTime (org.apache.kafka.common.utils.SystemTime)2 Time (org.apache.kafka.common.utils.Time)2 Test (org.junit.jupiter.api.Test)2 Measurable (org.apache.kafka.common.metrics.Measurable)1 MetricConfig (org.apache.kafka.common.metrics.MetricConfig)1 Metrics (org.apache.kafka.common.metrics.Metrics)1