Skip to content

Narad v1.0.0

Choose a tag to compare

@DebanganThakuria DebanganThakuria released this 15 Jul 07:53
39f08a3

Narad graduates to v1.0.0 — first production release.

What Narad is

A WAL-first, AP message broker in a single Go binary. Hit any node to produce, consume, or ack; the cluster does the routing. Queue semantics with visibility leases, fan-out topics, delayed delivery, offset replay, per-topic retention, zstd on disk, Raft-backed metadata. No ZooKeeper, no page of tuning knobs.

Send anything. Produce is a raw octet-stream: JSON, plain text, protobuf, binary — no client-side encoding, no SDK. JSON comes back verbatim, text as text, binary base64-flagged with payload_encoding (#100).

The evidence behind the 1.0

Everything below ran against a live 5-node cluster on Kubernetes.

Soak windows at 1,000 msg/s, full produce→consume→ack flow across parent + fan-out child + 60s-delay child:

  • Final window: 47h 28m, 170.9M messages, zero lost, zero produce failures, zero consume errors (4 produce retries total). Delay path fired 0 messages early, 0 overdue.
  • Prior windows: ~37h (~133M messages, ended by infrastructure node churn — broker self-healed, zero loss) and ~23h validation windows. 300M+ messages soaked in aggregate.

Chaos matrix — kill -9 of owners, leaders, joiners; restarts mid-produce; all zero-loss.

Crash-recovery hardening — the stale-replica defense family (#71#74): leader confirmation before destructive reconciliation, freshness-gated catch-up checks, and fresh leaders must Barrier + re-read before trusting their FSM.

Capacity — 50,000 msg/s sustained through the full produce→consume→ack flow on a 3-node cluster; the ceiling was the load generator, not the broker.

Operational drills — mixed-version rolling upgrade (partitioned StatefulSet roll), full backup/restore with demonstrated RPO, cluster scale-out 3→5 live under load, and an offset-replay drill (500 exact-offset reads + determinism checks + 2,000-read hammer) with no impact on live consumers.

Notable since the last beta

  • Payloads of any content type consumable end-to-end: JSON verbatim, text as string, binary base64-flagged (#100).
  • Ack backpressure: when a partition's acked-ahead set is full, ReserveNext serves only the frontier hole instead of feeding a redelivery spiral (#91).
  • Replay error contract: offsets reaped by retention return 410 Gone, negative offsets 400 — not 500s (#99).
  • Cluster scale-out via Raft join for fresh nodes (#75, #76).

Docs

Client guide, operator handbook (Helm chart included), and code-level internals: https://debanganthakuria.github.io/narad/

Honesty section

Narad is AP: it stays available and durable through node loss, and in exchange does not guarantee ordering. Partitions are single-owner with no replication — a permanently lost node loses its unconsumed partitions (retention-window data). Rebalance-on-join and node decommission are not in 1.0; new nodes serve partitions of topics created after they join.

🤖 Generated with Claude Code