One emitter, six windows
An event leaves its source, travels to the board, and drops into the window for its event time. As newer events arrive, the watermark advances and closes older windows.
Pause to inspect a travelling event. The clock and every journey stop together.Once the 0–5s window closes, send an older event and watch it take the late route.
| Window | State | Accepted | Late |
|---|---|---|---|
| 0–5s | Open | 0 | 0 |
| 5–10s | Open | 0 | 0 |
| 10–15s | Open | 0 | 0 |
| 15–20s | Open | 0 | 0 |
| 20–25s | Open | 0 | 0 |
| 25–30s | Open | 0 | 0 |
0 emitted = 0 travelling + 0 accepted +0 late
What to try
Start the emitter, pause mid-flight, then resume. Turn the source off: existing events finish their journeys. Send an older event after a lid closes, then try a longer watermark delay in a new run. Change emission rate mid-flight, or try jittered event times and seeded bursts from the same source.
How it works
The watermark is the newest event time to reach the board minus your chosen delay. A window closes when the watermark reaches its end. Counts come from the admission ledger, not from the pile's height. The shared useEmitters hook schedules arrivals on the physics clock. Jitter uses the watermarks preset, with event times before this study clamped to zero.
A small, bounded study inspired byFlink Watermarks…WTF?. The emitter runs for24 simulated seconds, then lets its last events finish. The continuous version below adds a following board and window retirement. See thearrival API or thefull watermarks explainer.
Keep the stream running
This version runs without a time limit. Travel, admission, the camera and sources share the simulation clock.
The board follows simulation time and keeps 15 seconds of history visible. Retired windows remain in the accessible table. Save a snapshot, run ahead, and restore it to replay the same events and random sequence.