The right time.
Not just arrival time.
Watermarks track event-time progress across every input. A window closes only when the slowest channel says it is safe.
Streams keep moving. Correctness should keep up. Process in event time, checkpoint with confidence, and recover without counting anything twice.
Go 1.25·Distributed stream processingEvents arrive out of order. Workers fail mid-job. Tidemark makes those cases part of the design.
Watermarks track event-time progress across every input. A window closes only when the slowest channel says it is safe.
Chandy–Lamport barriers travel alongside records. Aligned barriers define a consistent snapshot across the dataflow.
Restore a completed checkpoint and replay deterministic sources. Sinks commit only when the checkpoint is confirmed.
[12, 18, 24]Recovered run[12, 18, 24]Follow records through a two-input dataflow. Slow an input or trigger a crash, then inspect what gets committed.
Browser simulation · 80 synthetic recordsWait for every input.
min(wm₀, wm₁)Group by event time.
tumbling(5s)Commit on confirmation.
exactly-onceThis interactive model demonstrates the documented behavior using synthetic data in your browser. It does not execute the Go engine or measure its performance. Crash recovery compares final sorted sink contents; record delivery order can change.
Recovery is a property of the whole dataflow. Every part has a small, explicit contract.
Sources emit barriers at fixed element intervals.
Operators wait for the barrier on every input.
Capture operator state at a consistent cut.
Complete the checkpoint. Make sink output durable.
Sources derive each record from its seed and offset. Seeking to a saved position produces the same sequence, so a recovered run can be checked against a clean one.
Throughput and recovery measurements are pending on reference hardware. The documented state-size results are available now, with parallelism kept in view.
Benchmark methodology| Parallelism | Peak entries | Checkpoint state |
|---|---|---|
| p = 1 | 5,965 | 79.47 KiB |
| p = 2 | 397,846 | 15.56 MiB |
| p = 4 | 600,210 | 23.30 MiB |
2 million events · 5-second tumbling windows · 1 ms event time per element. Contiguous source ranges can hold back the watermark and accumulate state as parallelism increases.
Source: supplied Tidemark README · Phase 6bExplore the engine locally, inspect its invariants, and run the checks that protect them.
# Get the engine $ git clone https://github.com/AarinB1/tidemark.git $ cd tidemark # Verify correctness, then run the identity demo $ make check $ make demo
The final sorted sink contents match a clean run, even after a worker failure. Delivery can be at-least-once, and record emission order can change during recovery.
A watermark tracks event-time progress. At a multi-input gate, the output watermark is the minimum across input channels. A fast source cannot close a window before a slower source has caught up.
No. It is a deterministic browser model built from the supplied project documentation. Run the source locally to exercise the actual Go implementation, race tests, and chaos suites.
The engine uses deterministic seekable sources and fault schedules tied to logical positions. In this playground, reset a scenario to replay the same synthetic input. The worker-failure scenario injects one crash after record 24.