package core.framework.impl.kafka; import core.framework.impl.log.stat.Metrics; import org.apache.kafka.common.Metric; import org.apache.kafka.common.MetricName; import java.util.Map; /** * @author neo */ public class ProducerMetrics implements Metrics { private final String name; private Metric requestRate; private Metric outgoingByteRate; public ProducerMetrics(String name) { this.name = name; } public void setMetrics(Map<MetricName, ? extends Metric> kafkaMetrics) { for (Map.Entry<MetricName, ? extends Metric> entry : kafkaMetrics.entrySet()) { MetricName name = entry.getKey(); if ("producer-metrics".equals(name.group())) { if ("request-rate".equals(name.name())) requestRate = entry.getValue(); else if ("outgoing-byte-rate".equals(name.name())) outgoingByteRate = entry.getValue(); } } } @Override public void collect(Map<String, Double> stats) { if (requestRate != null) stats.put(statName("request_rate"), requestRate.value()); if (outgoingByteRate != null) stats.put(statName("outgoing_byte_rate"), outgoingByteRate.value()); } private String statName(String statName) { StringBuilder builder = new StringBuilder("kafka_producer"); if (name != null) builder.append('_').append(name); builder.append('_').append(statName); return builder.toString(); } }