Skip to content

Narad v1.1.0 — replication, when you ask for it

Choose a tag to compare

@DebanganThakuria DebanganThakuria released this 15 Jul 10:37
db75c9a

One API call:

curl -u $AUTH -X POST $NARAD/v1/topics \
  -d '{"name": "orders-replica", "parent": "orders"}'

That creates a fan-out child that is an asynchronous full copy of the parent — and, new in this release, its partitions are deliberately placed on different nodes than the parent's. A keyed record's original and copy never share a disk. Lose the parent's volume, and the data lives on in the replica (RPO ≈ fan-out lag, typically sub-second).

No replication subsystem was built for this — no quorums, no consistency protocol. It's a placement rule on the fan-out machinery that already soak-tested for days at 1,000 msg/s. You pay double disk and write IO only on topics that opt in, and a replica with longer retention doubles as an archive tier.

What's in it

  • Anti-affine placement (#101): a fan-out child's partition p is assigned away from the owner of the parent's partition p, in both assignment paths (create/alter and the controller reconcile sweep), sharing one decision function so they can never diverge. Deferral instead of guessing when the parent isn't placed yet. Existing assignments never move.
  • Create-as-child: POST /v1/topics accepts parent (+ fanout_delay_ms) — create → attach → assign in one call, which is the only moment anti-affinity can act (assignments are sticky). Partitions default to the parent's count; a failed attach rolls the create back; requires manage rights on the parent. CLI: --parent / --fanout-delay-ms. Works through the leader-forward path (#102 — caught by the post-deploy live check, plus a handler↔RPC field-parity test so the class of drift stays dead).
  • owner_node in partition stats: see the guarantee yourself by comparing parent and replica stats.

Honesty section

It's DR, not HA: the copy is async (records not yet fanned out die with the parent's volume) and consumers switch to the replica themselves — nothing fails over automatically. Children attached the pre-existing two-step way keep their old placement; use one-call creation for the pattern. Guaranteed separation needs ≥2 live nodes and matching partition counts (the default).

Upgrade notes: fully backward compatible — no wire or on-disk format changes; existing assignments untouched. Docs: https://debanganthakuria.github.io/narad/client/fanout-and-delay/#replication-when-you-ask-for-it

🤖 Generated with Claude Code