PrepZone Logo
PrepZone

Metrics, JMX, Prometheus, and Lag Alerts

Under-replicated partitions, offline replicas, and consumer lag alerts that wake the on-call engineer.

Why this matters

  • VaultCommerce PagerDuty fires on UnderReplicatedPartitions > 0 for 5 minutes.
  • Consumer lag SLO: inventory < 5k, analytics < 50k during peak.
  • JMX → Prometheus via kafka_exporter; Grafana dashboards per team.
  • Metrics without alerts are vanity — tie every chart to a runbook step.
Kafka brokersJMX
Prometheus
Grafana + PagerDuty
JMX metrics exported to Prometheus. Lag alerts route to on-call. Logs correlate via trace IDs.

Critical broker metrics

UnderReplicatedPartitions, OfflineReplicaCount, ActiveControllerCount (must be 1). Request handler idle percent below 20% signals overload. VaultCommerce alerts on disk above 75% and LogFlushRateAndTimeMs p99 spike.

Key points

  • Under-replicated partitions — ISR < RF; precursor to data loss risk
  • Request queue time — broker overload indicator
  • Consumer lag — offset behind log end
  • kafka_exporter — Prometheus metrics from JMX
  • Alert SLO — threshold + duration before page

Consumer lag alerts

kafka_consumergroup_lag_sum grouped by group, topic. Derivative alert on lag growth rate. Burrow optional for multi-cluster. VaultCommerce uses Prometheus recording rules for lag_velocity_5m.

VaultCommerce rollout checklist

Before promoting changes that touch the VaultCommerce order and payment event backbone, run the staging KRaft cluster (Kafka 3.7+, Schema Registry 7.x) through a 10k events/min soak test. Compare producer request latency p99 and consumer lag per group against the pre-deploy baseline. Alert on under-replicated partitions immediately. Document the change in the internal topic registry, attach Grafana screenshots to the change ticket, and keep an engineer on lag dashboards for 30 minutes after production rollout — roll back the service release before altering broker-level settings if lag or under-replicated partitions spike.

Java
# VaultCommerce Prometheus alert rules excerpt
groups:
  - name: kafka
    rules:
      - alert: KafkaUnderReplicatedPartitions
        expr: kafka_server_replicamanager_underreplicatedpartitions > 0
        for: 5m
        labels: { severity: critical }
        annotations:
          summary: "Kafka under-replicated partitions on {{ $labels.instance }}"

      - alert: InventoryConsumerLagHigh
        expr: kafka_consumergroup_lag_sum{group="inventory-service"} > 10000
        for: 5m
        labels: { severity: warning }

Quick recall

Everything you need if you only revisit this box.

  1. Alert on under-replicated partitions immediately.
  2. Lag velocity catches slow drains.
  3. JMX → Prometheus → Grafana → PagerDuty.

Test yourself

Answer these before moving on — recall is what makes it stick.