Skip to content

Instantly share code, notes, and snippets.

@ZacAttack
Created July 11, 2025 19:45
Show Gist options
  • Select an option

  • Save ZacAttack/f4d077c440cd6216d3ed2b130d86ba60 to your computer and use it in GitHub Desktop.

Select an option

Save ZacAttack/f4d077c440cd6216d3ed2b130d86ba60 to your computer and use it in GitHub Desktop.
function getProducerStats(topic) {
var kafkaProducers = heap.objects('org.apache.kafka.clients.producer.KafkaProducer', false);
while(kafkaProducers.hasMoreElements()) {
var next = kafkaProducers.nextElement();
if (next.clientId.toString().contains(topic)) {
return printProducerStats(next.metrics.metrics);
}
}
}
function printKafkaMetric(value) {
var metricClass = classof(value.metricValueProvider).name
var returnValue = {}
// return value;
switch(metricClass) {
case "org.apache.kafka.common.metrics.stats.Avg":
if (value.metricValueProvider.samples.elementData[0] != null) {
returnValue = value.metricValueProvider.samples.elementData[0].value;
}
break;
case "org.apache.kafka.common.metrics.stats.Rate":
if (value.metricValueProvider.stat == null) {
returnValue = value.metricValueProvider;
} else if (value.metricValueProvider.stat.samples.elementData[0] != null) {
returnValue["VALUE"] = value.metricValueProvider.stat.samples.elementData[0].value
returnValue["UNIT"] = value.metricValueProvider.unit.name.toString()
} else {
returnValue = value.metricValueProvider;
}
break;
case "org.apache.kafka.common.metrics.stats.CumulativeSum":
returnValue = value.metricValueProvider.total;
break;
case "org.apache.kafka.common.utils.AppInfoParser$ImmutableValue":
returnValue = value.metricValueProvider.value;
break;
default:
returnValue = metricClass;
// returnValue = value.metricValueProvider;
}
var descriptionAndValue = {};
descriptionAndValue["DESCRIPTION"] = value.metricName.description.toString();
descriptionAndValue["VALUE"] = returnValue;
return descriptionAndValue;
}
function printProducerStats(metrics) {
var results = {};
var mapAsArray = toArray(metrics.table);
for(i = 0; i < mapAsArray.length; i++) {
var e = mapAsArray[i];
while (e != null) {
if(e.key != null && e.val != null) {
results[e.key.name] = printKafkaMetric(e.val);
}
e = e.next;
}
}
return results;
}
getProducerStats("TopicName");
@ZacAttack
Copy link
Author

This bit of OQL finds producer stats for a given topic in a heap dump.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment