First stable release of tabellarium — a resilient Logback appender that ships structured log events to Apache Kafka. Named after the Roman letter-carrier, it never blocks the sender.
Highlights
- The sender is never made to wait: the logging thread only routes, encodes and enriches;
producer.sendruns on a bounded per-topic-class send worker (O(1) hand-off, overflow diverts visibly instead of blocking). - Quality of service per log stream: four topic classes (
AUDIT,FUNCTIONAL,TECHNICAL,PERFORMANCE) with per-class producers, mandatory producer-side overrides (acks=all, idempotence for AUDIT — reported at startup when they overrule operator values), circuit breakers and half-open probe throttling per class. - Losses are visible, never silent: an optional fallback appender behind its own bounded queue; every diversion and drop is counted. Delivery is deliberately best-effort transport — see Delivery guarantees for the exact scope of what the topic classes do and do not promise.
- Opt-in observability: Micrometer counters/timers/gauges, per-producer Kafka client metrics, appender-tagged circuit-breaker meters, Grafana dashboards; nothing until you bind a registry.
- A deliberately small public API: the operator surface only (ADR-0002) —
KafkaAppender+ XML configuration types,TopicClass, and the optional Spring metrics binding. - Evidence, not claims: 253 offline tests plus a real-broker Testcontainers stage in CI, 91% instruction coverage, a generated test-evidence page, measured performance verdicts in a committed benchmark report, and a full analysis audit trail under
docs/assessment/.
Documentation
Configuration guide, metrics overview, dashboards and the API reference: https://inqudium.github.io/tabellarium/
Full details in the CHANGELOG.
Artifacts
tabellarium-1.0.0.jar— the library (Java 21, Kotlin 2.4.10)bom.json— CycloneDX SBOM of the resolved runtime dependency graph
🤖 Generated with Claude Code