---
title: "Kafka tiered storage: offloading old segments to remote"
description: "With remote.storage.enable (KIP-405), Kafka moves offsets 0-9 to remote storage: localStartOffset rises to 10, logStartOffset stays 0 and nothing is deleted."
url: https://monedula.dev/kafka-simulator/scenarios/tiered-storage/
---

# Kafka tiered storage: offloading old segments to remote

Scenario 05.3.1 · Tiered storage. Storage · Advanced · about 2 min · Apache Kafka 4.3.

remote.storage.enable · aged segments leave local disk for the remote tier; localStartOffset rises to mark the boundary while logStartOffset stays put - nothing is deleted, only moved.

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

## What you start with

With remote.storage.enable, a topic’s older log segments are offloaded from local disk to cheaper remote storage while staying fully readable (KIP-405 tiered storage). This scenario is only the offload: twelve records are written, then the old prefix moves to the remote tier in two steps, and you watch localStartOffset climb while logStartOffset never moves.

## Step by step

1. **Remote storage on · empty log** (t+0.000s): A delete topic with remote.storage.enable. Two offsets matter on a tiered partition: logStartOffset (the oldest offset still readable anywhere) and localStartOffset (the oldest offset still on the broker's local disk). Both start at 0. Press play to produce twelve records. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=05.3.1&t=0)
2. **Twelve records, all local** (t+0.600s): Twelve records produced (HW=12). Nothing has been offloaded yet, so localStartOffset = logStartOffset = 0: the whole log sits on local disk, exactly as it would without tiered storage. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=05.3.1&t=1)
3. **Old prefix offloaded to remote** (t+1.000s): tier_offload moved offsets 0-5 to the remote tier and raised localStartOffset to 6 - only 6-11 remain on local disk. logStartOffset is still 0: every one of the twelve records is still readable, the oldest six just live somewhere cheaper. Nothing was deleted. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=05.3.1&t=2)
4. **Boundary moves again - two records local** (t+2.000s): A second offload raised localStartOffset to 10: offsets 0-9 are remote, only 10-11 are local. This is the steady state of a tiered topic - the local/remote boundary keeps climbing behind the head of the log while logStartOffset stays at 0. What a consumer sees when it reads below that boundary is 05.3.2; the day total retention finally deletes from the remote tier is 05.3.3. [Open at this step](https://monedula.dev/kafka-simulator/playground/?scenario=05.3.1&t=3)

## The takeaway

Tiered storage moves data, it does not delete it: each offload raises localStartOffset (the oldest offset still on local disk) while logStartOffset (the oldest readable offset) stays at 0 - so local disk stops bounding how much history a topic keeps.

## Configs in this scenario

- [`remote.storage.enable`](https://kafka.apache.org/43/configuration/topic-configs/#topicconfigs_remote.storage.enable): Turns on tiered storage (KIP-405) for the topic: older log segments are offloaded from local disk to a remote tier once they pass local.retention.ms, and a consumer reading past them hits a remote read. Total data is still bounded by retention.ms - tiering changes WHERE the data lives, not how long it is kept.

## Further reading

- [Apache Kafka documentation](https://kafka.apache.org/43/operations/tiered-storage/)
