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.

KeyMeaningDefault
basalt.listenAddress the data API binds to0.0.0.0:8080
basalt.data_dirDirectory holding every log segment/var/lib/basalt
limits.max_batchLargest number of events per write1024
retention.defaultHow long a event is kept72h

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