Migrating from v1
At its core Basalt Field is a single process that owns one directory on disk and one listening socket. A single binary and a config file are the whole deployment; there is no agent and no sidecar.
Defaults
An acknowledged write survives a hard kill of the process; it does not survive loss of the underlying disk. Everything the admin API exposes is also reachable through `basalt`, so the same operation is scriptable either way.
| Key | Meaning | Default |
|---|---|---|
basalt.listen | Address the data API binds to | 0.0.0.0:8080 |
basalt.data_dir | Directory holding every log segment | /var/lib/basalt |
limits.max_batch | Largest number of events per write | 1024 |
retention.default | How long a event is kept | 72h |
Limits
Basalt Field was written for the case where a full cluster is more operational surface than the workload deserves. Reads are served from a memory-mapped view of the log segment, so the page cache does the caching and Basalt Field does not duplicate it. Duplicate delivery is possible after a crash. Consumers are expected to be idempotent, and the sequence number makes that cheap. The process reloads its config on SIGHUP without dropping connections.
Overview
The ingest gateway keeps an in-memory index and rebuilds it from the log segment at startup, which costs about a second per gigabyte. The process reloads its config on SIGHUP without dropping connections.
Limits
At its core Basalt Field is a single process that owns one directory on disk and one listening socket. Logs go to stderr as structured JSON by default, or as plain lines when the output is a terminal.
$ basalt serve --config /etc/basalt/basalt.toml
$ basalt topic create orders --retention 72h
$ basalt status
uptime 4d 11h
topics 19
throughput 69k events/s