---
title: "Kafka auto.offset.reset: earliest vs latest vs none"
description: "Two new Kafka consumer groups join a topic holding three records: earliest replays all three, latest reads only new records, and none would raise an error."
url: https://monedula.dev/kafka-simulator/scenarios/auto-offset-reset/
---

# Kafka auto.offset.reset: earliest vs latest vs none

Scenario 02.1.2 · auto.offset.reset. Consumer groups · Intermediate · about 3 min · Apache Kafka 4.3.

Where a new group with no committed offset starts: earliest (replay the log), latest (only new records), or none (error); Kafka 4.x adds by_duration.

Run it: https://monedula.dev/kafka-simulator/playground/?scenario=02.1.2

## What you start with

When a brand-new consumer group has no committed offset, auto.offset.reset decides where it begins reading. This scenario contrasts three of the settings - earliest replays the whole log, latest skips to only new records, and none raises an error (4.x also offers by_duration).

## Step by step

1. **Three records in the log · no consumers yet** (t+0.900s): The log already holds offsets 0-2. Two fresh consumer groups are about to join - neither has a committed offset, so auto.offset.reset decides where each starts. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=02.1.2&t=0)
2. **g-latest starts at the END · g-earliest at the START** (t+1.200s): Both groups just joined. g-latest (reset=latest) seeked to the END - position 3, so it will read none of O1-O3. g-earliest (reset=earliest) seeked to the START - position 0, about to replay all three. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=02.1.2&t=1)
3. **g-earliest has replayed all three** (t+2.300s): g-earliest worked through the backlog to position 3, consuming O1, O2, O3 one per poll. g-latest is still at 3 having consumed none of them - same position number, opposite history. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=02.1.2&t=2)
4. **A new record · both groups read it** (t+3.000s): O4 arrives at offset 3 and both groups read it (position 4). Earliest replayed the backlog; latest only ever sees records produced after it joined. (reset=none would have thrown instead of choosing.) [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=02.1.2&t=3)

## The takeaway

auto.offset.reset only applies when there is no valid committed offset: choose earliest to reprocess history, latest to skip the backlog, or none to fail fast rather than silently guess.

## Configs in this scenario

- [`auto.offset.reset`](https://kafka.apache.org/43/configuration/consumer-configs/#consumerconfigs_auto.offset.reset): Where a consumer starts when its group has no committed offset or the offset no longer exists: latest (the default), earliest, by_duration (a time back from now, such as by_duration:PT1H), or none to throw an exception instead. [How auto.offset.reset works](https://monedula.dev/kafka-simulator/configs/auto-offset-reset/)

## Further reading

- [Apache Kafka documentation](https://kafka.apache.org/43/configuration/consumer-configs/#consumerconfigs_auto.offset.reset)
