skip to content

Provisioning & Auto Creation

Whether a stream appears the moment a client names it or only after a reviewed request, and which settings the platform stamps on it at birth. Asked because a typo becomes a permanent stream.

part ofBroker & streaming operationsoverview, primer and where to startread it →
on this pageshow

questions

4

On a cluster where naming a stream in a client call creates it, why is that convenience a governance hazard?

level: juniorimportance: must knowfreq 62%

answer

  1. convenience at write time, cost afterwards
  2. the name is matched exactly
  3. a transposed letter is a new stream
  4. empty, billed, and nobody's
  5. born with values nobody chose

basics

~20 s

Creation on first use turns every typo into a permanent stream: empty, billed, and indistinguishable from a deliberate one. It also means the stream is born with whatever values the platform supplies and no recorded owning team, rather than values anyone chose.

solid answer

~50 s

When a stream exists because a client named it, the act of naming is the act of creating, and the name is matched exactly. A transposed letter therefore produces a second, unrelated stream that succeeds silently — nobody gets an error, so nobody learns. That stream is then permanent in practice: it holds nothing anyone reads, but no routine scan can tell a misspelling from a deliberate variant of a real name, so deleting it is a judgement call nobody wants to make, and on a rented cluster it is usually billed for what it reserves rather than what it stores. The second cost is quieter and larger: a stream born this way carries whatever the cluster supplies for the values the call did not state, and carries no owning team at all. The convenience is real; it is simply paid for later, by someone else.

go deeper

for a junior

Remember the two costs and you have the answer: a typo creates a real stream because names are matched exactly, and a stream created that way arrives with values nobody chose and no owning team recorded.

for a middle

Explain the mechanics: which client action triggers creation varies by platform, the call succeeds so no error signal exists, and the values a stream receives come from the cluster rather than from the request.

for a senior

Show you have lived with the aftermath — an estate where near-miss names cannot be told from deliberate variants, so the list only ever grows, and every one of those streams is unowned when something eventually goes wrong with it.

for a principal

Frame it as spending the one cheap moment badly. Birth is when properties and ownership are free to set; leaving creation to a client call spends that moment on a decision nobody made, permanently, across the whole estate.

## What creation on first use means A **stream** — this tree's word for any named, durable channel an organisation provisions, whether records remain readable after delivery or a delivered message is gone once acknowledged — normally has to exist before traffic can touch it. Many platforms remove that step. When a client writes to, reads from, or declares a name that does not yet exist, the platform creates it on the spot and the call succeeds. The appeal is genuine. A developer gets a first record flowing in minutes, a test fixture needs no provisioning step, and nobody waits on a platform team. That is why the behaviour exists and why it is so often left on. Platforms differ in the trigger. On some, the first write creates the stream; on others, a client declares the destination as it connects and creation happens there; on some it works in one direction only; and on several the behaviour is off unless an operator turns it on. What they share is the shape of the consequence: **naming is creating**, and the name is matched exactly, character for character. ## The typo that becomes permanent Because the match is exact, a name and the same name with a transposed letter are two unrelated streams. The misspelled write does not fail. It succeeds against a brand-new stream that nobody requested, nobody owns, and nobody is reading. Three properties make that stream hard to get rid of afterwards: - **It produces no error signal.** The producer is happy, the platform is happy, and the only evidence is an extra row in a list nobody reads weekly. - **It cannot be told apart from a deliberate variant.** Real estates are full of near-miss names that differ by a suffix or a segment on purpose. An operator scanning a list has no way to know which is which without asking a team that may no longer exist. - **Absence of traffic is not proof of absence of need.** A stream with no reader today may have a quarterly consumer, so silence alone never justifies the one action in broker operations that cannot be undone. The result is an empty stream that stays. On a rented cluster it usually costs money even holding nothing, because such platforms commonly bill for what a stream reserves rather than for the bytes it currently stores. ## What the stream is born with The second consequence is the one candidates miss. A call that names a stream states a name and nothing else. Every other value the stream needs is supplied by the platform: how many stored copies of a record it keeps, how long records survive, and — on platforms that split a stream into parts worked in parallel — how many parts it has. None of those were chosen for this workload. They were chosen by whoever installed or rented the cluster, frequently for a demonstration rather than for production. Just as importantly, the stream has **no owner record**: no team identity, no rota, no mailbox. Nothing about a stream created this way can be traced back to a person or a team six months later. ## Compared with a reviewed request | | Creation on first use | A reviewed request | |---|---|---| | Time to first record | Seconds | As long as the path takes | | Name correctness | Whatever was typed | Checked before anything exists | | Values stamped at birth | The platform's, for no workload | The team's, stated | | Owning team | None recorded | Required before creation | | Typical failure | A silent, permanent orphan | A request that waits | A **reviewed request** here means only this: a declared definition — name, owning team, copy count, retention, parallelism count where the platform has one — approved by a human or by a pipeline before the stream exists. The usual neutral form is a definition held in version control and applied automatically. ## Why this is governance, not hygiene The hazard is not that a cluster accumulates clutter. It is that **the moment a stream comes into being is the only moment its properties are cheap to decide**, and creation on first use spends that moment on a client call that was not thinking about any of them. Every stream born this way is a decision the organisation never made, recorded permanently, owned by nobody. That is why platform teams treat the behaviour as a governance setting rather than a developer convenience — and why, where it is left on for a non-production cluster, it is usually paired with the understanding that nothing created there is ever promoted as-is.

  • The producer that misspelled the name has since been fixed. Why is deleting the stray stream still not straightforward?
    Because the evidence available is silence, and silence is ambiguous. Nothing in the stream records who created it or why, near-miss names are often deliberate, and a stream with no current reader may still have a periodic one. Deleting is the single step with no way back, so it needs proof rather than an absence.
  • Does this apply on a platform where a delivered message is removed rather than retained?
    Yes. A client that declares a destination on connect creates it just as silently, and the empty destination persists the same way. What differs is only the debris: where records remain readable after delivery, the stray stream may also hold a few misrouted records; where delivery consumes, it is usually empty from the start.
  • Is turning the behaviour off enough on its own?
    No. Switching it off converts a silent success into a failed call, which is an improvement only if something else creates streams quickly. Without a fast declared path, teams stop being blocked by reaching for whatever stream already exists, which damages the estate in a way that is harder to see.

A misdialled phone number that opens a new account instead of failing. The call connects, nothing warns you, and years later the company has an account it cannot close because it cannot prove nobody meant to open it.

saying these in an interview costs you the question

  • Says a mistyped stream is harmless because it stays empty
  • Assumes the platform eventually removes streams nobody uses
  • Thinks the behaviour only matters on non-production clusters
  • Believes a stream's birth values were chosen for that workload
  • Treats deleting an unused stream as an obvious, low-risk cleanup
  • Confuses a stream existing with a stream being wanted
open as a page

When a stream is created without a declared definition, which values does it receive and who actually chose them?

level: middleimportance: should knowfreq 52%

basics

~20 s

It receives the cluster's own values for how many stored copies a record has, how long records survive, and, where the platform splits a stream, how many parts it gets — plus no owning team. Whoever set the cluster up chose them, for no particular workload.

open as a page

Your team replaced creation on first use with a reviewed request, and engineers are now routing around it — what did the gate get wrong?

level: seniorimportance: should knowfreq 48%

basics

~20 s

The gate is slower than the path it replaced, so avoiding it is the cheapest option. A reviewed path only holds if it delivers a stream faster than the workaround does; otherwise engineers reuse an unrelated stream and the estate degrades invisibly.

open as a page

As the lead choosing what a cluster stamps on a stream created without stated values, which settings should have no default at all?

level: principalimportance: nice to knowfreq 38%

basics

~20 s

Settings whose right value is workload-specific and costly to get wrong should have no default, so an absent value fails the request instead of being decided for someone. Everything else needs one, or the mandatory list grows until requesters copy another team's file.

open as a page