Use case

Event Stream Ingestion

The live events flowing through your systems — clicks, orders, sensor readings — land safely in your data tables: recorded exactly once, checked at the door, with a lost-and-found for anything malformed.

The short version

Think of a mailroom handling a constant river of letters. Each letter is stamped in exactly once — never lost, never counted twice — anything with a bad address goes to a lost-and-found shelf instead of the trash, and a clock on the wall shows how far behind the sorting is. Boring, and everything upstairs depends on it.

How it flows
Event enters the streamChecked against the contractGood? Lands exactly onceBad? Lost-and-found shelfFreshness on the dashboard

The problem, in plain words

Your systems produce a constant stream of events — every order, click, and status change — flowing through a message pipeline (Kafka, Kinesis, or Pulsar). To be useful for reports or AI, those events have to land in your data tables. Today, that landing is a homegrown script written by someone three jobs ago. When it crashes mid-batch, some events load twice and Tuesday's totals are mysteriously high. When a source team renames a field, the script loads empty values for a week before anyone notices. And when you ask 'how fresh is this data?', the honest answer is 'probably fine?'

What we set up

We replace the homegrown loader with a contracted landing path. Stream processors (Flink, Spark Structured Streaming, or Kafka Connect) write events into the shared tables (Iceberg or Delta) with exactly-once delivery — a setup where each event is recorded one time, even if something crashes and retries midway. A schema registry (Confluent or Apicurio — a gatekeeper that knows what each event is supposed to look like) checks every event at the door. Events that don't match go to a dead-letter table (a lost-and-found for bad records) instead of vanishing, and the source's owner is notified. A freshness gauge per stream shows exactly how far behind the data is.

How it works, step by step

  1. An event happens

    An order is placed, a sensor reports, a status flips. It enters the stream immediately.

  2. The gatekeeper checks its shape

    Does it match the agreed format? Field types, required fields, no surprises. Schema changes happen deliberately, not by accident.

  3. Good events land exactly once

    The processor writes to the shared tables with crash-safe bookkeeping — a retry never creates a duplicate, a failure never loses a record.

  4. Bad events go to lost-and-found

    Malformed records land in a dead-letter table with a note about what was wrong, and the team that owns the source gets pinged.

  5. Freshness is measured, not guessed

    Every stream reports how far behind it is, on the same monitoring as everything else. 'Is this current?' has a numeric answer.

What changes for you

Before: real-time data is a black box that works until it very quietly doesn't. After: streams are first-class sources in your data catalog, with a named owner, a checked format, a visible freshness gauge, and a lost-and-found you can inspect. Duplicates and silent gaps stop being a quarterly surprise. What it won't do: it won't catch values that are wrong but well-formed. If a source sends a price of zero in a perfectly valid event, it will land — catching that is the job of data quality gates, one step downstream.