Stream States and Lifecycle
Every stream moves through a small set of runtime states. These states help you understand whether a stream is ready to run, actively transferring data, paused, or finished with a terminal outcome.
Use Observability alongside this page when you need logs, runtime progress, and operational troubleshooting.
Stream states
| State | Terminal | Success | Description |
|---|---|---|---|
READY | No | — | Stream exists but has not started yet |
RUNNING | No | — | Actively reading from source and writing to target |
PAUSED | No | — | Temporarily suspended; can be resumed via API (POST /streams/{id}/resume) |
FINISHED | Yes | Yes | Completed successfully — normal terminal state for Load workflows |
TIME_LIMIT_REACHED | Yes | Yes | Stopped after reaching the configured elapsedTime limit |
EVENT_LIMIT_REACHED | Yes | Yes | Stopped after reaching the configured numberOfEvents limit |
STOPPED | Yes | No | Stopped intentionally by the user via API (POST /streams/{id}/stop) |
FAILED | Yes | No | Ended because of an error (connectivity, permissions, invalid SQL, write failures) |
Common state transitions
Typical Load flow:
READY -> RUNNING -> FINISHED
Typical bounded run:
READY -> RUNNING -> TIME_LIMIT_REACHED
READY -> RUNNING -> EVENT_LIMIT_REACHED
Typical interrupted run:
READY -> RUNNING -> PAUSED
READY -> RUNNING -> STOPPED
READY -> RUNNING -> FAILED
Terminal vs success
All states from FAILED onward are terminal — the stream will not continue without a new start. But only FINISHED, TIME_LIMIT_REACHED, and EVENT_LIMIT_REACHED count as successful completions. STOPPED is terminal but not success — it means the run was interrupted before natural completion.
Troubleshooting by state
FAILED
Check:
- source and target connectivity
- permissions and replication prerequisites
- query validity if custom SQL is involved
- runtime logs in Observability
PAUSED or STOPPED
Check whether the state was user-initiated or caused by a deployment-specific control or limit.
TIME_LIMIT_REACHED or EVENT_LIMIT_REACHED
Confirm whether the limit was intentional. If not, adjust the stream configuration before the next run.