Skip to content

Best tools to reset Kafka consumer group offsets

Comparisons
Chad Harris·September 22, 2026·11 min read

The tools that reset Kafka consumer group offsets are the kafka-consumer-groups.sh CLI (a dry run by default, --execute to apply), the Admin API’s alterConsumerGroupOffsets for scripted resets, the Kafka Streams application reset tool, and UIs such as Kpow, AKHQ, Kafbat UI and Conduktor Console. Every one of them needs the consumer group to be inactive first.

They differ on whether you can preview the change, how finely you can scope it, what they do when the group is still running, and whether anyone can see who did it afterwards. Kpow is Factor House’s product, and I work at Factor House as a Solutions Architect, so it is scored on the same rubric and the same sources as every other option. What an offset is, and how lag is read from it, is covered in Kafka offsets, part of the complete Kafka guide.

Reset offsets with the native CLI: dry run, then execute

Stop every consumer in the group first. The Apache Kafka operations documentation says to “first make sure that the consumer instances are inactive”, and the Admin API rejects offset changes for a group with members. Confirm the group is empty:

kafka-consumer-groups.sh --bootstrap-server <broker:9092> \
  --describe --group <group> --state

The STATE column should read Empty. Before changing anything, export the current offsets so you can put them back:

kafka-consumer-groups.sh --bootstrap-server <broker:9092> \
  --group <group> --all-topics \
  --reset-offsets --to-current --export > offsets-before.csv

Then plan the reset. Without --execute the command only prints the plan, with a NEW-OFFSET per partition. --dry-run makes that explicit:

kafka-consumer-groups.sh --bootstrap-server <broker:9092> \
  --group <group> --topic <topic> \
  --reset-offsets --to-datetime 2026-09-22T09:00:00.000 --dry-run

Read every row. If it is what you intended, run the same command with --execute in place of --dry-run. If it goes wrong, the export restores the old positions:

kafka-consumer-groups.sh --bootstrap-server <broker:9092> \
  --group <group> --reset-offsets --from-file offsets-before.csv --execute

The scope is one group at a time, and one of --all-topics, --topic <topic>, or --topic <topic>:0,1,2 for specific partitions. The strategies are --to-earliest, --to-latest, --to-offset, --to-datetime, --by-duration, --shift-by (positive or negative), --to-current and --from-file. Out-of-range results are clamped to the partition’s available offsets, so shifting 15 past an end offset of 10 lands on 10.

A Kafka Streams application needs its own tool. kafka-streams-application-reset.sh resets the input topics and deletes the internal topics, and the application reset tool documentation warns it “makes irreversible changes”. Unlike kafka-consumer-groups.sh, it runs for real unless you pass --dry-run.

What to score an offset reset tool on

An offset reset rewrites where a consumer group will resume reading. Done right, it replays a window after a bad deploy or skips a backlog nobody needs. Done wrong, it silently drops data or reprocesses a topic from the beginning. Five criteria decide how likely each is with a given tool.

1. Can you preview the change?

A dry run that prints the new offset for every partition is the single most important safety feature. The CLI previews by default. The Streams reset tool does not, which catches people who assume it behaves like its sibling.

2. How finely can you scope it?

Group, topic and partition are the scopes that matter. Skipping one bad record needs a single partition, the case walked through in how to find and skip a poison pill. Replaying after a bad deploy usually needs one topic. A tool that only resets a whole group, or makes partition scope awkward, turns a small fix into a large one.

3. What happens when the group is still running?

Kafka refuses an offset change while the group has active members. The Admin API documentation for alterConsumerGroupOffsets states that “the group must be empty”, and adds that it “is not transactional so it may succeed for some partitions while fail for others”. As Derek Troy-West, our co-founder and CEO, puts it, that requirement is Kafka’s, and tools work with what Kafka allows. They differ on what they do about it: fail and make you retry, or schedule the change until the group empties.

4. Does it keep resets deliberate?

My rule is that production consumers use auto.offset.reset=latest, and any reset is a deliberate, manual operation. Setting earliest just in case is easy to forget, and the day a consumer group ID changes, even for an innocent reason like renaming a service, the group reprocesses everything from the beginning. A tool should make the reset an explicit act with a named target.

A reset is also not always the right tool. In one incident I covered in a talk on Kafka operational issues, a partition count increase plus auto.offset.reset=latest meant hundreds of messages per partition, across around a hundred partitions, were silently skipped. The system was real-time and could not stop processing, so instead of rewinding the group, a parallel consumer replayed the missed offsets, tens of thousands of messages, without interrupting live traffic.

5. Who is allowed to do it, and is it recorded?

A reset in production usually happens during an incident, under pressure. Tom Crowley, our founding engineer, described the typical path in 2021, a problem now covered in break-glass access with temporary policies: a VPN, a jumpbox, and “the right combination of bash commands against the Kafka cluster”, from a jumpbox that “generally has full access to the Kafka cluster” with “no audit log recording the actions being committed”. The better tools gate resets behind a role, can require approval, and log who reset which group to where. The best tools to control destructive Kafka operations applies the same question to deletes, truncation and config changes.

F1 The default that keeps resets deliberate /resources/kafka/

Use latest in production and make offset resets a deliberate, manual operation.

Chad Harris, Solutions Architect at Factor House
Setting auto.offset.reset to earliest just in case means a renamed consumer group silently reprocesses a topic from the beginning. Things that go bump in the night

Offset reset tools compared

The table scores each tool on the five criteria in order. Managing offsets inside Kpow step by step, with a local environment you can run, is covered in manage Kafka consumer offsets with Kpow.

Tool Preview Scope Strategies When the group is running Access control and audit Source
kafka-consumer-groups.sh Yes, dry run is the default, --execute applies One group, all topics, a topic, or topic:partitions Earliest, latest, offset, datetime, duration, shift-by, current, from file Fails, you stop the consumers and rerun Whoever holds CLI credentials, no audit Apache Kafka docs
Admin API alterConsumerGroupOffsets Only what your code prints Any set of partitions you pass Any offset you compute Fails, “the group must be empty”, and may partially succeed Your code’s responsibility Apache Kafka Javadoc
kafka-streams-application-reset.sh Only with --dry-run, it runs for real by default One Streams application: input topics reset, internal topics deleted Earliest by default, plus other positions All instances must be stopped Whoever holds CLI credentials, no audit Apache Kafka docs
Kpow Its docs do not describe a preview step. Scheduled resets can be cancelled before they run, and staged mutations add an approval Whole group, host, topic or partition Offset, timestamp, local datetime, clear to earliest, skip one offset Scheduled, runs once the group is EMPTY, up to 15 minutes by default GROUP_EDIT permission, staged mutations, temporary policies, audit log (Enterprise) Kpow docs
AKHQ The form shows each partition’s current, first and last offset before you submit Per partition, in a form Earliest, latest, timestamp or a typed offset per partition Kafka rejects the change UPDATE_OFFSET role, opt-in audit events to a Kafka topic GitHub: tchiotludo/akhq
Kafbat UI The form states the target, with no dry-run step in its reset API A topic, optionally specific partitions Earliest, latest, timestamp, offset Refused unless the group is EMPTY or DEAD RESET_OFFSETS permission, audit log to a topic or console GitHub: kafbat/kafka-ui
Conduktor Console Yes, a Preview step shows current and new offset per partition All partitions, specific topics, or specific topic-partitions Earliest, latest, offset, timestamp, shift-by Must be inactive (Empty or Dead) RBAC with a consumer group Reset permission, audit log Conduktor’s documentation, Consumer groups and RBAC pages

How the options score

On preview, the CLI and Conduktor Console lead: both show the new offset for every partition before anything changes. AKHQ’s form shows current, first and last offsets per partition as you edit, which works as a preview. Kpow’s documentation does not describe a preview step, so a Kpow reset relies on scheduling, cancellation and approval rather than a dry-run table. That is a real gap next to the CLI.

On scope, Kpow is the most flexible, because it can reset from any dimension of the group’s topology: the whole group, one host’s assignments, a topic, or a single partition. The CLI and Conduktor both reach partition level. Kafbat UI works one topic at a time.

On strategies, the CLI has the longest list, including --by-duration, --from-file and negative --shift-by, and it is the only tool here with a built-in export and restore. Conduktor comes closest in a UI with shift-by.

On a running group, Kpow is the only tool here that schedules the reset and applies it the moment the group reaches EMPTY, so you can queue the change, scale the consumers down, and not race them. Everything else fails and waits for you to try again. Kpow also reads offsets for EMPTY groups directly from the AdminClient, so a group taken offline by a poison message can still be reset.

On access and audit, Kpow gives the most options: a GROUP_EDIT permission, staged mutations that put an administrator’s approval in front of the reset, temporary policies that grant GROUP_EDIT on one group for a fixed window, and an audit log of the request and the policies it was checked against. Conduktor, AKHQ and Kafbat UI all have role-based permissions and audit logs. The CLI and the Admin API have neither.

Each tool in detail

Rank 1

39 out of 50 Total

Listed first because it is our product. Scores are unadjusted.

Type
Kafka UI
Running group
Scheduled until EMPTY, 15 minutes by default
Edition
Staged mutations, temporary policies and audit log are Enterprise
Preview the change
3 out of 10
Scope
10 out of 10
Strategies
6 out of 10
When the group is running
10 out of 10
Access control and audit
10 out of 10

What it does. Resets, clears or skips offsets from the consumer group topology or the consumer details view, scoped to the group, a host, a topic or a partition, by offset, timestamp or local datetime.

Where it wins. Scheduling against the EMPTY-group rule, the widest scope options, and governance: approval, temporary access and an audit trail. It also manages simple consumers that use manual partition assignment, in their own tab.

Where it falls short. No documented dry-run table, and no export or restore of offset plans. Staged mutations, temporary policies and the audit log are Enterprise features.

Rank 2

Conduktor Console

conduktor.io

36 out of 50 Total

Type
Commercial Kafka console
Strategies
Five, including shift-by
Preview
Current and new offset per partition
Preview the change
10 out of 10
Scope
8 out of 10
Strategies
8 out of 10
When the group is running
2 out of 10
Access control and audit
8 out of 10

What it does. A commercial console with a reset flow that takes a topic-partition scope, five strategies including shift-by, and a preview before applying.

Where it wins. The most CLI-like safety in a UI, with a preview and partition scope.

Where it falls short. Like the CLI, it needs the group inactive before you start, rather than scheduling the change.

Rank 3

kafka-consumer-groups.sh

kafka.apache.org

31 out of 50 Total

Type
Command-line tool
Ships with
Apache Kafka
Default
Dry run, --execute applies
Preview the change
10 out of 10
Scope
8 out of 10
Strategies
10 out of 10
When the group is running
2 out of 10
Access control and audit
1 out of 10

What it does. Plans and applies offset resets for one group, with export and import of offset plans as CSV.

Where it wins. Dry run by default, the fullest set of strategies, and --export plus --from-file for backup and restore.

Where it falls short. No access control beyond cluster credentials and no audit. --topic <topic> without partitions resets every partition, which is easy to type by mistake.

Rank 4

28 out of 50 Total

Type
Open-source Kafka UI
Permission
UPDATE_OFFSET role
Preview the change
7 out of 10
Scope
7 out of 10
Strategies
6 out of 10
When the group is running
2 out of 10
Access control and audit
6 out of 10

What it does. An open-source UI whose consumer group update form lets you set each partition’s offset, or fill the form from earliest, latest or a timestamp.

Where it wins. Free, and the per-partition form makes the target explicit.

Where it falls short. Kafka rejects the change if members are active, so timing is on you, and the audit trail is opt-in and lives in a Kafka topic.

Rank 5

25 out of 50 Total

Type
Open-source Kafka UI
Permission
RESET_OFFSETS
Scope
One topic per reset
Preview the change
4 out of 10
Scope
6 out of 10
Strategies
6 out of 10
When the group is running
2 out of 10
Access control and audit
7 out of 10

What it does. An open-source UI that resets a topic’s offsets for a group, optionally for specific partitions, to earliest, latest, a timestamp or an offset.

Where it wins. Free, with a clean reset form and a dedicated RESET_OFFSETS permission.

Where it falls short. One topic at a time, and it refuses the reset unless the group is already EMPTY or DEAD.

Rank 6

Admin API alterConsumerGroupOffsets

kafka.apache.org

17 out of 50 Total

Type
Java Admin API method
Transactional
No, may partially succeed
Preview the change
2 out of 10
Scope
8 out of 10
Strategies
5 out of 10
When the group is running
1 out of 10
Access control and audit
1 out of 10

What it does. Sets committed offsets for any partitions of a group from code.

Where it wins. Automation, such as a runbook step or a replay job that computes its own targets.

Where it falls short. Not transactional, so a failure can leave some partitions moved and others not. Preview, logging and approval are all yours to build.

Rank 7

kafka-streams-application-reset.sh

kafka.apache.org

16 out of 50 Total

Type
Command-line tool
Default
Runs for real without --dry-run
Also deletes
Internal topics
Preview the change
5 out of 10
Scope
3 out of 10
Strategies
5 out of 10
When the group is running
2 out of 10
Access control and audit
1 out of 10

What it does. Resets a Streams application’s input topic offsets and deletes its internal topics so it can reprocess from scratch.

Where it wins. It is the only tool that understands a Streams application’s internal topics.

Where it falls short. Irreversible, runs for real without --dry-run, and local state stores on every instance still need deleting by hand.

How Factor House approaches offset resets

Kpow is built around the idea that an offset reset should be quick to do correctly and hard to do by accident. The consumer group documentation covers the actions: reset by offset, timestamp or datetime at group, host, topic or partition level, clear to earliest, and skip one offset on a partition. Every group action is scheduled and runs once the group’s state is EMPTY, for up to 15 minutes by default (MUTATION_SCHEDULER_EXPIRES_MS), and you can watch or cancel it from the Mutations tab. Staged mutations add an approval step, temporary policies grant GROUP_EDIT on one group for a fixed window, and the audit log records each request with the user, the action and the policies it was checked against. In the live Kpow demo, open a consumer group’s topology and select the group, a topic or a partition to see the reset, clear and skip options at each scope. The Kpow product page covers the rest of the product.

If a reset is needed because consumers are falling behind, measure the lag first with one of the tools to monitor consumer lag. What is Kafka rebalancing? and Kafka consumers in production cover the causes a reset will not fix.

Kpow live demo

Preview an offset reset before you run it

Open the Kpow demo to see consumer group offsets by partition and how a reset is scoped, permissioned and logged.

Built for platform and data engineers running Kafka in production.

Try the Kpow demo

FAQ

How do I reset a Kafka consumer group’s offsets?

Stop every consumer in the group, then run kafka-consumer-groups.sh --reset-offsets with a scope (--all-topics, --topic, or --topic <topic>:<partitions>) and a strategy such as --to-earliest or --to-datetime. Check the dry-run output, then rerun with --execute. Export the current offsets first with --to-current --export so you can restore them.

Can I reset offsets while consumers are running?

No. Kafka only accepts offset changes for a group with no active members. Kpow can schedule the reset so it runs the moment the group empties, and every other tool here makes you stop the consumers first and then run it.

What is the difference between auto.offset.reset and resetting offsets?

auto.offset.reset is a consumer setting that only applies when a group has no committed offset for a partition, such as a brand-new group. Resetting offsets changes the committed offsets of an existing group. Use latest for auto.offset.reset in production and treat resets as deliberate operations.

How do I reset offsets for a Kafka Streams application?

Use kafka-streams-application-reset.sh, not kafka-consumer-groups.sh, because it also deletes the application’s internal topics. Stop every instance, run it with --dry-run first, and delete the local state stores on each instance before restarting.

Related reading