Search in sources :

Example 1 with TokenBucket

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

the class SensorTest method testStrictQuotaEnforcementWithTokenBucket.

@Test
public void testStrictQuotaEnforcementWithTokenBucket() {
    final Time time = new MockTime(0, System.currentTimeMillis(), 0);
    final Metrics metrics = new Metrics(time);
    final Sensor sensor = metrics.sensor("sensor", new MetricConfig().quota(Quota.upperBound(2)).timeWindow(1, TimeUnit.SECONDS).samples(10));
    final MetricName metricName = metrics.metricName("credits", "test-group");
    assertTrue(sensor.add(metricName, new TokenBucket()));
    final KafkaMetric tkMetric = metrics.metric(metricName);
    // Recording a first value at T+0 to bring the remaining credits below zero
    strictRecord(sensor, 30, time.milliseconds());
    assertEquals(-10, tkMetric.measurableValue(time.milliseconds()), 0.1);
    // Theoretically, we should wait 5s to bring back the avg rate to the define quota:
    // 10 / 2 = 5s
    time.sleep(5000);
    // Unlike the default rate based on a windowed sum, it works as expected.
    assertEquals(0, tkMetric.measurableValue(time.milliseconds()), 0.1);
    strictRecord(sensor, 30, time.milliseconds());
    assertEquals(-30, tkMetric.measurableValue(time.milliseconds()), 0.1);
    metrics.close();
}
Also used : MetricName(org.apache.kafka.common.MetricName) TokenBucket(org.apache.kafka.common.metrics.stats.TokenBucket) MockTime(org.apache.kafka.common.utils.MockTime) Time(org.apache.kafka.common.utils.Time) SystemTime(org.apache.kafka.common.utils.SystemTime) MockTime(org.apache.kafka.common.utils.MockTime) Test(org.junit.jupiter.api.Test)

Example 2 with TokenBucket

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

the class TokenBucketTest method testUnrecord.

@Test
public void testUnrecord() {
    // Rate  = 5 unit / sec
    // Burst = 2 * 10 = 20 units
    MetricConfig config = new MetricConfig().quota(Quota.upperBound(5)).timeWindow(2, TimeUnit.SECONDS).samples(10);
    TokenBucket tk = new TokenBucket();
    // Expect 100 credits at T
    assertEquals(100, tk.measure(config, time.milliseconds()), 0.1);
    // Record -60 at T, expect 100 credits
    tk.record(config, -60, time.milliseconds());
    assertEquals(100, tk.measure(config, time.milliseconds()), 0.1);
    // Advance by 2s, record 60, expect 40 credits
    time.sleep(2000);
    tk.record(config, 60, time.milliseconds());
    assertEquals(40, tk.measure(config, time.milliseconds()), 0.1);
    // Advance by 2s, record -60, expect 100 credits
    time.sleep(2000);
    tk.record(config, -60, time.milliseconds());
    assertEquals(100, tk.measure(config, time.milliseconds()), 0.1);
}
Also used : TokenBucket(org.apache.kafka.common.metrics.stats.TokenBucket) Test(org.junit.jupiter.api.Test)

Example 3 with TokenBucket

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

the class TokenBucketTest method testRecord.

@Test
public void testRecord() {
    // Rate  = 5 unit / sec
    // Burst = 2 * 10 = 20 units
    MetricConfig config = new MetricConfig().quota(Quota.upperBound(5)).timeWindow(2, TimeUnit.SECONDS).samples(10);
    TokenBucket tk = new TokenBucket();
    // Expect 100 credits at T
    assertEquals(100, tk.measure(config, time.milliseconds()), 0.1);
    // Record 60 at T, expect 13 credits
    tk.record(config, 60, time.milliseconds());
    assertEquals(40, tk.measure(config, time.milliseconds()), 0.1);
    // Advance by 2s, record 5, expect 45 credits
    time.sleep(2000);
    tk.record(config, 5, time.milliseconds());
    assertEquals(45, tk.measure(config, time.milliseconds()), 0.1);
    // Advance by 2s, record 60, expect -5 credits
    time.sleep(2000);
    tk.record(config, 60, time.milliseconds());
    assertEquals(-5, tk.measure(config, time.milliseconds()), 0.1);
}
Also used : TokenBucket(org.apache.kafka.common.metrics.stats.TokenBucket) Test(org.junit.jupiter.api.Test)

Aggregations

TokenBucket (org.apache.kafka.common.metrics.stats.TokenBucket)3 Test (org.junit.jupiter.api.Test)3 MetricName (org.apache.kafka.common.MetricName)1 MockTime (org.apache.kafka.common.utils.MockTime)1 SystemTime (org.apache.kafka.common.utils.SystemTime)1 Time (org.apache.kafka.common.utils.Time)1