Skip to content

Best tools to monitor Kafka consumer lag

Comparisons
Chad Harris·September 22, 2026·12 min read·Updated

Kafka consumer lag monitoring tools fall into five groups: the kafka-consumer-groups.sh CLI, client-side JMX metrics, open-source lag exporters and evaluators (Burrow, kafka_exporter, KMinion), Kafka UIs (Kpow, AKHQ, Kafbat UI), and managed-service consoles such as Amazon MSK CloudWatch metrics, Confluent Cloud, Datadog and Conduktor.

Which one fits depends on five things: where lag is measured, whether you get lag in messages or in time, whether you can see it per partition, whether alerts fire on a sustained trend rather than every spike, and whether the tool shows enough context to find the cause. The complete Kafka guide covers the wider tooling picture.

At a glance

Nine options are scored here on this page's five weighted criteria, 70 points in all. The rubric is weighted: Context to find the cause counts three times, and Where lag is measured, Offset or time lag, Per-partition detail and Trend alerting count once. The five listed first, of nine, each out of 70: Kpow 58, which takes its best score on Per-partition detail (10 out of 10) and its lowest on Offset or time lag (4 out of 10); AKHQ and Kafbat UI 41; KMinion 40; Managed-service consoles 40; Burrow 35.

Consumer lag tools compared

Diagnosing a specific lag spike, rather than choosing a tool, is covered step by step in how to monitor Kafka consumer lag. The table scores each option on the criteria explained under how these tools were scored, in the same order.

Rank Tool Where lag is measured Offset or time lag Per partition Alerting Visible when consumers die Source
1 Kpow Cluster-side, including EMPTY groups Offset lag, plus consumption rate and last-read timestamp per assignment. No time lag metric Yes, by group, topic, partition, host and broker Prometheus egress endpoints for Alertmanager or Grafana Yes, lag is calculated for EMPTY groups Kpow docs
2 Burrow Cluster-side, from committed offsets over a sliding window Offset lag, but its headline output is a status per group and partition (OK, WARNING, STALLED, STOPPED) Yes, evaluated per partition Built-in email and HTTP notifiers, no thresholds to tune Yes, a group that stops committing is marked STOPPED GitHub: linkedin/Burrow
3 Kafka Lag Exporter Cluster-side Offset lag plus interpolated time lag Yes Prometheus rules you write Yes GitHub: seglo/kafka-lag-exporter, archived February 2024
4 KMinion Cluster-side, Admin API or the offsets topic Offset lag. Its end-to-end probe measures roundtrip latency on its own topic, not your consumers’ time lag Configurable, per partition or per topic Prometheus Alertmanager rules you write Yes, and it exports empty-member counts GitHub: redpanda-data/kminion
5 Amazon MSK (CloudWatch) Cluster-side, managed Both: OffsetLag, SumOffsetLag, MaxOffsetLag, EstimatedTimeLag, EstimatedMaxTimeLag Yes CloudWatch alarms Only for STABLE or EMPTY groups, so not during a long rebalance AWS MSK docs
6 Confluent Cloud Cluster-side, managed Offset lag through the Metrics API (consumer_lag_offsets), and the Cloud Console Not stated in the documentation page cited Through the Metrics API and third-party monitors Not stated in the documentation page cited Confluent’s documentation, “Monitor Kafka Consumer Lag in Confluent Cloud”
7 Datadog Data Streams Monitoring Service-side, correlated with traces and logs Consumer lag plus end-to-end pathway latency Per service and queue Out-of-the-box monitor templates Depends on the Kafka integration feeding it Datadog’s documentation, Data Streams Monitoring overview
8 kafka_exporter Cluster-side, Prometheus exporter Offset lag, documented as approximate Yes, kafka_consumergroup_lag per partition Prometheus Alertmanager rules you write Yes GitHub: danielqsj/kafka_exporter
9 AKHQ Cluster-side, in the UI Offset lag Yes Not described in its docs, pair it with an exporter Yes akhq.io
10 Kafbat UI Cluster-side, in the UI Offset lag Yes, combined and per partition Not described in its docs, pair it with an exporter Yes GitHub: kafbat/kafka-ui
11 kafka-consumer-groups.sh Cluster-side, from committed offsets at the moment you run it Offset lag only Yes, one row per partition None, it is a one-off command with no history Yes, it describes groups with no active members Apache Kafka docs
12 Consumer JMX (records-lag-max) Client-side, from the consumer’s fetch position Offset lag only Yes, records-lag per partition, plus a per-client max Through whatever scrapes JMX No, the metric disappears with the process Apache Kafka docs
13 Conduktor Console Cluster-side Both: offset lag, and a time lag its docs describe as the estimated time to catch up based on consume rate Yes, lag per partition and per member Threshold alerts on OffsetLag or TimeLag to Slack, Teams, email or webhook Yes Conduktor’s documentation, Alerts and Consumer groups pages

How the options score

On time lag, Amazon MSK, Conduktor and Datadog lead the field, and Kafka Lag Exporter showed how to interpolate it from open-source parts before it was archived. Kpow does not compute time lag. It exposes consumption rate (group_assignment_delta) and the last time a group was observed reading a partition (group_assignment_last_read), which answer “is it moving” but not “how many minutes behind”.

On visibility when consumers die, every cluster-side tool passes and client-side JMX fails. Burrow goes furthest, because it turns “stopped committing” into its own STOPPED status rather than leaving you to infer it from a flat line.

On alerting without noise, Burrow is the only option that evaluates trends out of the box. kafka_exporter, KMinion and Kpow all hand you Prometheus metrics and leave the rule to you, which is more work and more control. Conduktor’s alerts are threshold-based, with time lag as one of the thresholds.

On context and action, the UIs win. Kpow, AKHQ and Kafbat UI put lag next to the group’s members and let you reset offsets from the same screen, and the best tools to reset consumer group offsets compares that half of the job on its own rubric. Kpow adds member-level lag by host and broker, and its Signals checks flag unbalanced assignments and idle members, the signal that was missing in the 39,000-idle-member incident. KMinion is the strongest exporter on this criterion because it exports empty-member counts.

Alerting on lag without the noise

Whatever exporter you choose, write two alerts: one for sustained growth and one for a stalled partition. Here is the shape for kafka_exporter’s metrics. The window is the part to tune, and it should be longer than your longest normal rebalance or batch job.

groups:
  - name: kafka-consumer-lag
    rules:
      # Lag has grown steadily for the whole window on one partition
      - alert: KafkaConsumerLagGrowing
        expr: deriv(kafka_consumergroup_lag[15m]) > 0
        for: 15m
      # Committed offset has not moved while lag is above zero
      - alert: KafkaConsumerPartitionStalled
        expr: delta(kafka_consumergroup_current_offset[10m]) == 0 and kafka_consumergroup_lag > 0
        for: 10m

The stalled-partition rule is the one that catches a poison pill: one partition’s offset stops, its lag rises, and every other partition in the group looks fine. How to find and skip a poison pill walks through confirming and clearing it. Burrow’s STALLED status encodes the same idea without the PromQL. If you run Kpow, the per-assignment offsets on its /group-offsets/v1 endpoint and partition end offsets on /offsets/v1 support the same two rules.

Each option in detail

Rank 1

58 out of 70 Total

Try Kpow in the live demo No signup needed.

Type
Kafka UI
Lag alerting
Prometheus egress, Enterprise
Where lag is measured
8 out of 10
Offset or time lag
4 out of 10
Per-partition detail
10 out of 10
Trend alerting
6 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
10 out of 10
Why these scores for Kpow
Where lag is measured 8 out of 10
Lag is calculated cluster-side, including for EMPTY groups. That is the same pass as the other cluster-side tools, and Burrow scores higher.
Offset or time lag 4 out of 10
Consumption rate and last-read timestamp answer “is it moving” only, because “Kpow does not compute time lag”.
Per-partition detail 10 out of 10
It breaks lag down by group, topic, partition, host and broker, and adds member-level lag by host and broker, the widest breakdown on the page.
Trend alerting 6 out of 10
The rule is yours to write, because “kafka_exporter, KMinion and Kpow all hand you Prometheus metrics and leave the rule to you”, and Burrow beats it here.
Context to find the cause 10 out of 10
It adds host/broker lag and Signals for unbalanced assignments and idle members, in a group where “On context and action, the UIs win”.

How it measures lag. Cluster-side, broken down by group, topic, partition, host and broker, and still calculated for EMPTY groups from each assignment’s start and end offsets.

Where it wins. Lag sits next to the group’s topology, members and offset actions, so going from “this partition is stuck” to resetting or skipping its offset happens on one screen. Signals flags unbalanced member assignments and idle members. Prometheus egress exposes group_offset_lag, where group_offset_lag_sum is the group total, plus per-assignment offsets.

Where it falls short. No time lag metric, and its documented lag-alerting path is Prometheus egress into your own Alertmanager or Grafana, so the alert rules are yours to write. Prometheus egress and Signals are Enterprise features.

Staying patched. Kpow’s release notes name the CVEs each release remediates, and the 96.4 image built on 5 August 2026 bundles 311 dependencies of which one carries a high or critical advisory, none of them published before that release. That is not a claim to patch faster than a community project: Kpow’s own dependency remediation has run from 14 to 128 days, and the current image still ships CVE-2026-75595 in netty, a 9.1 critical public since 19 August 2026, unpatched. What a licence buys here is not a different deployment model, because Kpow is self-hosted too. It is a company contracted to ship the fix. Every dependency figure on this page was read on 24 September 2026 from the published artefacts and from nvd.nist.gov.

Rank 2

AKHQ and Kafbat UI

akhq.io, github.com/kafbat/kafka-ui

41 out of 70 Total

Type
Open-source Kafka UIs
Where lag is measured
8 out of 10
Offset or time lag
3 out of 10
Per-partition detail
8 out of 10
Trend alerting
1 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
7 out of 10
Why these scores for AKHQ and Kafbat UI
Where lag is measured 8 out of 10
Both read cluster-side in the UI, so both stay visible when consumers die.
Offset or time lag 3 out of 10
Both give offset lag.
Per-partition detail 8 out of 10
Per-partition detail is there, and Kafbat UI shows it combined and per partition.
Trend alerting 1 out of 10
Neither documents lag alerting or history, and their docs leave you to pair them with an exporter.
Context to find the cause 7 out of 10
Lag sits next to members and offset reset on the same screen, so “The UIs win”, with fewer signals than Kpow and no host/broker lag or Signals named.

How they measure lag. Both open-source UIs read group offsets from the cluster and show lag per group and per partition.

Where they win. Free, self-hosted, and good enough for looking at lag and resetting offsets by hand.

Where they fall short. Neither documents lag alerting or lag history, so a team using them for lag still needs an exporter feeding Prometheus.

Staying patched. Both are Apache-2.0 and community-maintained, and the patching question is not whether either project has a CVE of its own. It is what the current release ships. AKHQ 0.28.0, cut on 6 August 2026, bundles 270 libraries of which 18 carry a high or critical advisory, 16 of them already public with fixes available on the day it shipped and the oldest now open 108 days. Kafbat UI last released v1.5.0 in April 2026, and at least 20 high or critical advisories have been published against what it bundles in the 157 days since, with no release to carry a fix; only 150 of its 266 jars could be measured, so that number is a floor and the two are not comparable on it.

Rank 3

40 out of 70 Total

Type
Prometheus exporter
Where lag is measured
8 out of 10
Offset or time lag
3 out of 10
Per-partition detail
8 out of 10
Trend alerting
6 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
5 out of 10
Why these scores for KMinion
Where lag is measured 8 out of 10
Cluster-side through the Admin API or the offsets topic, it stays visible when consumers die and exports empty-member counts.
Offset or time lag 3 out of 10
Offset lag is what it gives, and its end-to-end probe measures its own test topic, not consumer time lag.
Per-partition detail 8 out of 10
Lag is configurable, per partition or per topic.
Trend alerting 6 out of 10
Prometheus Alertmanager rules you write, same as kafka_exporter and Kpow.
Context to find the cause 5 out of 10
The page’s summary names it “the strongest exporter on this criterion” because it exports empty-member counts.

How it measures lag. A Prometheus exporter that reads group offsets through the Admin API or by consuming the offsets topic, with lag exported per partition or summed per topic.

Where it wins. It exports kminion_kafka_consumer_group_empty_members, members with no partition assigned, which is the idle-member signal most lag tools skip. Its end-to-end probe measures produce-to-consume roundtrip latency on the cluster.

Where it falls short. The end-to-end probe measures KMinion’s own test topic, not how far your consumers are behind in time. Alerting is Prometheus rules again.

Staying patched. KMinion is MIT and actively released, v2.3.6 in September 2026, with no CVE filed against its own code. There is no support contract behind it, so a dependency advisory is yours to track and to rebuild for.

Rank 4

Managed-service consoles

40 out of 70 Total

Covers
Amazon MSK, Confluent Cloud, Datadog, Conduktor Console
Where lag is measured
6 out of 10
Offset or time lag
8 out of 10
Per-partition detail
6 out of 10
Trend alerting
5 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
5 out of 10
Why these scores for Managed-service consoles
Where lag is measured 6 out of 10
MSK lag metrics are emitted only for STABLE or EMPTY groups, so they pause during a long rebalance; Confluent is not stated; Datadog depends on its Kafka integration; Conduktor does.
Offset or time lag 8 out of 10
On time lag, “Amazon MSK, Conduktor and Datadog lead the field”, and Confluent Cloud is offset lag only.
Per-partition detail 6 out of 10
MSK and Conduktor show lag per partition, Datadog per service and queue, and Confluent is not stated.
Trend alerting 5 out of 10
CloudWatch alarms, Datadog monitor templates, Conduktor threshold alerts; the page calls these threshold-based, not trend evaluation.
Context to find the cause 5 out of 10
Datadog correlates lag with traces and logs; the rest cover only their own platform, “consumer behaviour is your code”.

How they measure lag. Amazon MSK publishes offset lag and estimated time lag to CloudWatch or open monitoring with Prometheus. Confluent Cloud exposes consumer_lag_offsets through its Metrics API. Datadog Data Streams Monitoring adds consumer lag and pathway latency to the services it traces. Conduktor Console alerts on offset lag and on a time lag estimated from the consume rate.

Where they win. Time lag without building anything, in the case of MSK and Conduktor, and correlation with traces and logs, in the case of Datadog.

Where they fall short. Each covers the platform it belongs to. Providers often do a great job monitoring your cluster, but consumer behaviour is your code, and the MSK metrics pause for a group that is rebalancing.

Rank 5

35 out of 70 Total

Type
Lag evaluator
Latest release
v1.9.6, May 2026
Where lag is measured
10 out of 10
Offset or time lag
4 out of 10
Per-partition detail
8 out of 10
Trend alerting
10 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
1 out of 10
Why these scores for Burrow
Where lag is measured 10 out of 10
It turns stopped committing into its own STOPPED status, which is why the page’s summary says “Burrow goes furthest”.
Offset or time lag 4 out of 10
Offset lag, but its statuses (STALLED, STOPPED) say whether a partition is moving; no time lag.
Per-partition detail 8 out of 10
Lag is evaluated per partition.
Trend alerting 10 out of 10
The page’s summary calls it “the only option that evaluates trends out of the box”, with no thresholds to tune.
Context to find the cause 1 out of 10
It has no UI of its own, and the page’s own prose says it “tells you nothing about why a group is stalled”.

How it measures lag. Burrow stores a window of committed offsets per partition (ten by default, per its evaluation rules) and applies rules: lag that hits zero anywhere in the window is OK, offsets that do not move while lag persists are STALLED, lag that grows while offsets advance is WARNING, and a group that stops committing is STOPPED.

Where it wins. No thresholds to tune, and the statuses map directly to the questions on-call engineers ask. It is still maintained, with v1.9.6 released in May 2026.

Where it falls short. Its output is built for status checks and notifiers rather than time-series dashboards, so most teams still run an exporter alongside it. It has no UI of its own, and it tells you nothing about why a group is stalled.

Staying patched. Burrow is Apache-2.0 and moves slowly: seven releases in two years, a 221-day gap between October 2025 and May 2026, no CVE filed against its own code and no security policy in the repository root. A dependency advisory waits for whoever volunteers to cut the next release.

Rank 6

33 out of 70 Total

Type
Prometheus exporter
Latest release
v1.10.0, September 2026
Where lag is measured
8 out of 10
Offset or time lag
2 out of 10
Per-partition detail
8 out of 10
Trend alerting
6 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
3 out of 10
Why these scores for kafka_exporter
Where lag is measured 8 out of 10
A cluster-side exporter, it stays visible when consumers die.
Offset or time lag 2 out of 10
Only offset lag comes out, documented as approximate.
Per-partition detail 8 out of 10
It records kafka_consumergroup_lag per partition.
Trend alerting 6 out of 10
Alertmanager rules you write; page supplies the growth and stalled-partition rules for its metrics. “More work and more control”.
Context to find the cause 3 out of 10
Exports kafka_consumergroup_members only; page credits KMinion, not kafka_exporter, on this criterion.

How it measures lag. A Prometheus exporter that polls the cluster and exposes kafka_consumergroup_lag per partition, kafka_consumergroup_lag_sum per topic, and kafka_consumergroup_members.

Where it wins. It is the default choice for a team that already runs Prometheus and Grafana, and it is actively released (v1.10.0 in September 2026).

Where it falls short. Offset lag only, documented as approximate, and every alert is a rule you write and maintain.

Staying patched. kafka_exporter is Apache-2.0 with no CVE filed against its own code, but only two releases in twenty-four months, the most recent v1.10.0 in September 2026. A dependency fix reaches you when the next release carries it, and the last gap was long.

Rank 7

33 out of 70 Total

Type
Prometheus exporter
Status
Archived February 2024
Where lag is measured
8 out of 10
Offset or time lag
8 out of 10
Per-partition detail
8 out of 10
Trend alerting
6 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
1 out of 10
Why these scores for Kafka Lag Exporter
Where lag is measured 8 out of 10
Cluster-side measurement keeps it visible when consumers die.
Offset or time lag 8 out of 10
It interpolates time lag on top of offset lag, which the page’s own prose calls “the clearest open-source reference for time lag”. It sits below the managed leaders, which the page says lead the field.
Per-partition detail 8 out of 10
It covers lag per partition.
Trend alerting 6 out of 10
Alerting comes from Prometheus rules you write.
Context to find the cause 1 out of 10
This page describes no member, assignment or cause context.

How it measures lag. It interpolates time lag from observed committed offsets, turning offset lag into an estimate of how long a record waits.

Where it wins. It is the clearest open-source reference for time lag.

Where it falls short. The repository was archived in February 2024, so it is not a sound choice for a new deployment.

Staying patched. The Kafka Lag Exporter repository is archived. Its last release, v0.8.2, is from October 2022 and its last push from February 2024. Nothing in it will be patched.

Rank 8

kafka-consumer-groups.sh

kafka.apache.org

25 out of 70 Total

Type
Command-line tool
Ships with
Apache Kafka
Where lag is measured
8 out of 10
Offset or time lag
3 out of 10
Per-partition detail
8 out of 10
Trend alerting
0 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
2 out of 10
Why these scores for kafka-consumer-groups.sh
Where lag is measured 8 out of 10
It reads committed offsets from the cluster and describes groups with no active members, so it works when consumers are down.
Offset or time lag 3 out of 10
It gives offset lag only.
Per-partition detail 8 out of 10
Output is one row per partition.
Trend alerting 0 out of 10
A one-off command with no history has no trend and no alert.
Context to find the cause 2 out of 10
This page names no member, assignment or cause context beyond the LAG snapshot.

How it measures lag. Run kafka-consumer-groups.sh --describe --group <group> and it prints CURRENT-OFFSET, LOG-END-OFFSET and LAG for every partition the group has committed offsets for.

Where it wins. It is always there, needs no deployment, and reads committed offsets from the cluster, so it works when the consumers are down.

Where it falls short. It is a snapshot. There is no history, no trend and no alert, and at scale someone ends up running it on behalf of every application team.

Rank 9

Consumer JMX metrics

kafka.apache.org

24 out of 70 Total

Type
Client-side metric
Metric
records-lag-max
Where lag is measured
2 out of 10
Offset or time lag
3 out of 10
Per-partition detail
8 out of 10
Trend alerting
2 out of 10
Context to find the cause ×3 weight, this criterion counts 3 times toward the total
3 out of 10
Why these scores for Consumer JMX metrics
Where lag is measured 2 out of 10
Client-side, where “the metric disappears with the process”, and this page’s summary of how the options score has client-side JMX failing.
Offset or time lag 3 out of 10
The metric carries offset lag only.
Per-partition detail 8 out of 10
It exposes records-lag per partition, plus a per-client max.
Trend alerting 2 out of 10
Alerting runs only through whatever scrapes JMX, and the metric vanishes when the consumer dies or stalls.
Context to find the cause 3 out of 10
It is the only source showing what the consumer itself believes, which helps when debugging fetch behaviour.

How it measures lag. The Java consumer reports records-lag, records-lag-avg and records-lag-max per partition, and a per-client records-lag-max, from its own fetch position.

Where it wins. It needs no extra service, and it is the only source that shows what the consumer itself believes, which helps when debugging fetch behaviour.

Where it falls short. It measures the fetch position, not the committed offset, and it vanishes when the consumer dies or stalls. Use it as a supplement to a cluster-side tool, never as the only lag signal.

How Factor House approaches consumer lag

Kpow treats lag as the start of an investigation rather than the end of one. The Kpow consumer lag product page shows the views: lag by group, topic, partition, host and broker at once, with Kafka Streams applications detected automatically. The consumer group documentation covers lag for EMPTY groups and the offset actions (reset, clear, skip) you reach from the same screen. You can check this against the per-partition criterion in the live Kpow demo: open any consumer group and compare its lag by partition, host and broker with the group total. The Prometheus integration is how lag gets to Alertmanager and Grafana, and the metrics glossary lists every lag and offset metric.

When the lag is on one partition and the offset has stopped moving, the cause is often a record the consumer cannot process. Kafka consumer monitoring and performance tuning covers the other consumer-side causes, and what is Kafka rebalancing? covers the lag that rebalances create on their own. For the wider monitoring stack beyond lag, see the best Kafka monitoring tools.

Product demo · 6 min

Apache Kafka consumer group monitoring & lag: Kpow demo

Chad Harris walks through consumer group monitoring in Kpow: tracking group stability over time, breaking lag down to the partition level, safely resetting or skipping offsets on a running group, and using group topology to trace lag back to a host or topic.

Kpow live demo

See consumer lag per partition, live

Open the Kpow demo and watch lag by group and partition on a running cluster, then drill from a lagging group to the topic behind it.

Built for platform and data engineers running Kafka in production.

Try the Kpow demo

FAQ

What is the best tool to monitor Kafka consumer lag?

For a team on Prometheus, kafka_exporter or KMinion for metrics plus Burrow-style trend alerts is the strongest open-source stack. If you need lag in minutes rather than messages, Amazon MSK and Conduktor compute time lag. If you want lag next to the controls to fix it, a UI such as Kpow puts both on one screen.

Why is records-lag-max not enough for lag alerting?

It is reported by the consumer process, so it stops when the consumer crashes, hangs or sits in a long rebalance. It is also based on the fetch position, not the committed offset. Pair it with a cluster-side tool that reads committed offsets.

What is the difference between offset lag and time lag?

Offset lag is the number of messages between a group’s committed offset and the partition’s end. Time lag is how long the oldest unconsumed record has been waiting. Time lag is the one you can hold against an SLA, because it does not depend on throughput.

How do I stop consumer lag alerts from firing on every spike?

Alert on sustained growth over a window longer than your normal rebalances and batch jobs, and separately on a partition whose committed offset has stopped moving while lag is above zero. Burrow’s evaluation rules do this for you, and a Prometheus for: clause does it for exporter metrics.

How these tools were scored

Lag is the gap between a partition’s log end offset and the offset a consumer group has reached. Every tool on this page reports some version of that number. They differ on five criteria, and each one maps to a way a lag dashboard has let a real on-call engineer down.

1. Where the lag is measured: client-side or cluster-side

Client-side lag comes from the consumer process itself. The Java consumer exposes it as a JMX metric:

kafka.consumer:type=consumer-fetch-manager-metrics,client-id="{client-id}", attribute records-lag-max

The Apache Kafka monitoring documentation notes that this value “is based on current offset and not committed offset”, and it only exists while the consumer is running. If the process crashes, hangs, or sits in a long rebalance, the metric stops reporting at the moment you most need it.

Cluster-side lag is calculated from outside the application: the group’s committed offsets, read through the Admin API or the __consumer_offsets topic, subtracted from each partition’s end offset. It keeps reporting when every consumer is dead, which is the scenario that matters. In Kpow’s own consumer group documentation the reason is stated directly: offsets for an EMPTY group are fetched from the AdminClient, which “is critical for when a poison message causes an entire consumer group to go offline.” Managed metrics have their own gaps here. Amazon’s MSK consumer lag documentation says lag metrics “are emitted only if a consumer group is in a STABLE or EMPTY state”, so a group stuck rebalancing goes quiet in CloudWatch.

2. Offset lag or time lag

“50,000 messages behind” means nothing until you know the throughput. On a topic taking 100,000 messages a second it is half a second of delay. On a topic taking ten a minute it is days. Time lag, the age of the oldest unconsumed record or an estimate of it, is the number an on-call engineer can compare against an SLA. Few tools compute it, because doing it properly means sampling record timestamps or interpolating offset commits over time. Each option below is scored on which of the two it actually reports.

3. Per-partition detail, not a group average

A group-level lag total averages one stuck partition against its healthy siblings and hides it. A poison pill, a hot key or an unbalanced assignment shows up as one partition climbing while the rest sit near zero. The heaviest Kpow users ask for group offset lag at topic-partition granularity in their Prometheus metrics for exactly this reason.

4. Alerting on a sustained trend, not a spike

Lag spikes are normal. A batch job lands, a deploy triggers a rebalance, and lag jumps and drains within minutes. Alerting on a fixed threshold pages people for all of that. The useful alert fires when lag keeps growing for longer than your longest normal rebalance or batch, or when a partition’s committed offset stops moving while lag is above zero. Burrow builds this in, and the Prometheus-based tools let you write it yourself.

5. Enough context to find the cause

Lag tells you something is wrong, not why. In a talk on Kafka operational incidents Chad Harris walked through a service that scaled to 400 instances, each starting 100 consumers in one shared group. With 100 topics of 10 partitions there were only 1,000 assignments, so 39,000 members sat idle, the group coordinator broker hit 100% CPU, rebalances slowed, and lag climbed. The team doubled the instance count, which made it worse. The missing signal was consumer group membership size, and the broker-side signals that would have shown the overloaded coordinator are compared in the best tools to monitor Kafka broker health. A lag tool that also shows member counts, idle members and assignment balance next to the lag line saves you from scaling the wrong thing.

Every option is scored from 0 to 10 on each criterion, from the evidence and sources this page cites, and the reason for each score is on its card. The criteria are weighted: Where lag is measured counts once, Offset or time lag counts once, Per-partition detail counts once, Trend alerting counts once and Context to find the cause counts three times, for a total out of 70. Context to find the cause counts three times here, because a lag number with no way to see which member, host or partition is behind it is an alert nobody can act on. Where lag is measured, offset or time lag, per-partition detail and trend alerting count once. This page is published by Factor House, which makes Kpow. Every option is scored on the same rubric and the same sources: Kpow's per-criterion scores are set the same way as every other option's and are not adjusted, and the weights apply to every option alike. Kpow ranks first on its total of 58 out of 70. The other options follow by total.

Related reading