Hot: Local WAL
Every message is appended to a local Write-Ahead Log (WAL) on the broker’s disk and assigned a monotonic offset. This is the fast path for all writes and real-time reads.
Reliable topics persist messages so consumers can replay history and topics can move between brokers without losing data. Non-reliable topics bypass storage entirely.
Danube’s persistence is built on three independent storage tiers:
Hot: Local WAL
Every message is appended to a local Write-Ahead Log (WAL) on the broker’s disk and assigned a monotonic offset. This is the fast path for all writes and real-time reads.
Warm: Valkey
Optional. Messages are double-written to Valkey Redis Streams for crash recovery. If the broker is lost, the new broker replays buffered messages from Valkey into a fresh WAL.
Cold: Cloud Storage
Optional. A background exporter uploads sealed WAL segments to cloud object storage (S3, GCS, Azure Blob) as immutable segment objects for long-term archival and historical replay.
Each tier is independent and opt-in. You can run any combination depending on your durability and retention requirements.
The storage.mode setting controls where sealed WAL segments are exported:
| Mode | Durable Storage | Use Case |
|---|---|---|
local | Local filesystem only | Single-node, development, edge |
shared_fs | Shared filesystem (NFS, EFS) | On-prem multi-broker clusters |
object_store | Cloud object storage (S3, GCS, Azure Blob) | Cloud-native multi-broker deployments |
In all modes, the local WAL handles recent writes. In shared_fs and object_store modes, a background exporter continuously publishes sealed segments to durable storage for historical replay and cross-broker availability.
shared_fs and object_store modes)When a consumer reads from a topic, the broker serves data from the tier closest to the source:
The local WAL always takes precedence for data it still holds. Valkey and cloud storage are only consulted for offsets that have been rotated out of the WAL.
When a topic moves between brokers (e.g., during rebalancing), offset continuity is preserved:
last_committed_offset + 1In shared_fs and object_store modes, historical reads on the new broker are served from durable segments. In local mode, only the offset sequence is preserved, there is no shared durable backend.
For the full protocol, see Reliable Topic Move.