public final class CardinalityLimiters
extends java.lang.Object
Sample usage:
class WebServer { // Limiter instance, should be shared for all uses of that // tag value private final Function<String, String> pathLimiter = CardinalityLimiters.mostFrequent(10); private final Registry registry; private final Id baseId; public WebServer(Registry registry) { this.registry = registry; this.baseId = registry.createId("server.requestCount"); } public Response handleRequest(Request req) { Response res = doSomething(req); // Update metrics, use limiter to restrict the set of values // for the path and avoid an explosion String pathValue = pathLimiter.apply(req.getPath()); Id id = baseId .withTag("path", pathValue) .withTag("status", res.getStatus()); registry.counter(id).increment(); } }
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
OTHERS
Replacement value that is used if the number of values exceeds the limit.
|
Modifier and Type | Method and Description |
---|---|
static java.util.function.Function<java.lang.String,java.lang.String> |
first(int n)
Restrict the cardinality of the input to the first
n values that are seen. |
static java.util.function.Function<java.lang.String,java.lang.String> |
mostFrequent(int n)
Restrict the cardinality of the input to the top
n values based on the
frequency of the lookup. |
public static final java.lang.String OTHERS
public static java.util.function.Function<java.lang.String,java.lang.String> first(int n)
n
values that are seen.n
- Number of values to select.OTHERS
.public static java.util.function.Function<java.lang.String,java.lang.String> mostFrequent(int n)
n
values based on the
frequency of the lookup. This limiter is useful when the frequency of the values
is non-uniform and the most common are the most important. If there are many
values with roughly the same frequency, then it will use a first(int)
limiter to keep the number of values within bounds.
The limiter will adjust to changes in the frequency over time, but it must also
protect against high rates of churn in the values. Keep in mind that this can cause
a delay in new high frequency value being used instead of being grouped as part of
OTHERS
.
n
- Number of values to select.OTHERS
.