Perché

Il percorso abituale per l’osservabilità di Kafka è un sidecar JMX exporter — un processo aggiuntivo per ogni broker, con la propria finestra di scrape, i propri modi di fallire e un modello di metriche che non corrisponde del tutto a ciò che parla il resto dello stack.

monedula-metrics-reporter elimina il sidecar. Si collega alla stessa interfaccia MetricsReporter di Kafka e invia le metriche direttamente a un collector OpenTelemetry tramite OTLP — gRPC o HTTP, a tua scelta. Il contesto del broker (cluster id, node id) viene allegato come resource attribute, così lo stesso stream di metriche funziona su tutti i broker senza cablaggio per ogni host.

Tutto l’I/O di export avviene su un thread daemon. Se il collector è lento o non disponibile, nulla raggiunge i thread che Kafka usa per servire il traffico.

Per tutto il contesto — i due sistemi di metriche nascosti dentro Kafka, perché le dashboard Grafana importate così spesso mostrano No Data e come l’OTLP nativo districa il tutto — leggi Le metriche di Kafka devono per forza essere così difficili?.

Configurazione

Inserisci lo shadow jar in $KAFKA_HOME/libs/, poi in server.properties:

metric.reporters=dev.monedula.metricsreporter.OtlpMetricReporter
otlp.metric.reporter.endpoint=http://otel-collector:4317
otlp.metric.reporter.transport=grpc

Lo stesso plugin funziona sui client Kafka — registralo tramite metric.reporters nella configurazione del producer o del consumer e ottieni lo stream lato client corrispondente nello stesso collector.

Uno stack demo completo (broker + collector + Prometheus + Grafana) si trova sotto quickstart/ nel repo.

Compatibilità

Kafka 3.x e 4.x. Java 17+. Sono cablati sia la moderna SPI MetricsReporter sia il registry legacy Yammer, così ottieni la copertura delle metriche che Kafka emette oggi senza lasciare indietro quelle di Yammer.