Client libraries

Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. Upgrades are in place: stop, replace the binary, start. The on-disk format is forward compatible within a major version.

Overview

At its core Vantage Labs is a single process that owns one directory on disk and one listening socket. Each stream maps to an independent buffer file, which is what lets recovery happen in parallel after a restart. The API is versioned in the path. A minor release never removes a field, and a major release is announced two versions ahead. Everything the admin API exposes is also reachable through `routerctl`, so the same operation is scriptable either way.

KeyMeaningDefault
routerctl.listenAddress the data API binds to0.0.0.0:8080
routerctl.data_dirDirectory holding every buffer file/var/lib/routerctl
limits.max_batchLargest number of log lines per write1024
retention.defaultHow long a log line is kept72h

What to watch

Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. Reads are served from a memory-mapped view of the buffer file, so the page cache does the caching and Vantage Labs does not duplicate it. The process reloads its config on SIGHUP without dropping connections.

$ routerctl serve --config /etc/routerctl/routerctl.toml
$ routerctl stream create orders --retention 72h
$ routerctl status
  uptime      4d 11h
  streams   6
  throughput  37k lines/s

What to watch

Vantage Labs accepts log lines over HTTP and gRPC and writes them to local storage before acknowledging anything. Duplicate delivery is possible after a crash. Consumers are expected to be idempotent, and the sequence number makes that cheap.

Behaviour under load

Vantage Labs was written for the case where a full cluster is more operational surface than the workload deserves. The API is versioned in the path. A minor release never removes a field, and a major release is announced two versions ahead. Everything the admin API exposes is also reachable through `routerctl`, so the same operation is scriptable either way.

KeyMeaningDefault
routerctl.listenAddress the data API binds to0.0.0.0:8080
routerctl.data_dirDirectory holding every buffer file/var/lib/routerctl
limits.max_batchLargest number of log lines per write1024
retention.defaultHow long a log line is kept72h