Watermark Simulator

Two source splits feed one downstream event-time window. Predict the downstream watermark before you move a slider: it is not an average, it is the minimum of every active split.

Scenario presets — predict, then click

Split A

Current watermark (s) 180s
Idle (stopped emitting)

Split B

Current watermark (s) 40s
Idle (stopped emitting)

Idleness detection policy

Enable idleness timeout
Idle duration assumed (s) 45s
Idleness timeout threshold (s) 30s

"Idle duration assumed" models how long a split marked idle has been silent. If it exceeds the threshold and the timeout policy is enabled, Flink excludes that split from the downstream watermark computation entirely (withIdleness()).

Split A
Split B
Downstream operator: min(active splits)

Downstream watermark

1-min tumbling window end (s) 120s
0s

🌊 Why the minimum, not the average

A downstream operator reading from multiple source splits (Kafka partitions, files, shards) cannot fire a window until it is certain no earlier event can still arrive on any of them. So it advances its own watermark to the minimum watermark reported by all splits it considers active — one slow or stalled split holds the whole window back, no matter how far ahead the others race.