Narad v1.1.0 — replication, when you ask for it
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/topicsacceptsparent(+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_nodein 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