StreamingQueryListener — Intercepting Life Cycle Events of Streaming Queries¶
StreamingQueryListener is an abstraction of listeners to be notified about the life cycle events of all the streaming queries in a Spark Structured Streaming application:
StreamingQueryListener is used internally by StreamingQueryListenerBus to post a streaming event to all registered StreamingQueryListeners.
StreamingQueryListener can be used by Spark developers to intercept events in Spark Structured Streaming applications.
Contract¶
onQueryProgress¶
onQueryProgress(
event: QueryProgressEvent): Unit
Informs that MicroBatchExecution has finished triggerExecution phase (the end of a streaming batch)

onQueryStarted¶
onQueryStarted(
event: QueryStartedEvent): Unit
Informs that DataStreamWriter was requested to start execution of the streaming query (on the stream execution thread)

Note
onQueryStarted is used internally to unblock the starting thread of StreamExecution.
onQueryTerminated¶
onQueryTerminated(
event: QueryTerminatedEvent): Unit
Informs that a streaming query was <

Lifecycle Events¶
StreamingQueryListener is informed about the life cycle events when StreamingQueryListenerBus is requested to doPostEvent.
QueryStartedEvent¶
Intercepted by onQueryStarted
Posted when StreamExecution is requested to run stream processing (when DataStreamWriter is requested to start execution of the streaming query on the stream execution thread)
QueryProgressEvent¶
Intercepted by onQueryProgress
Posted when ProgressReporter is requested to update progress of a streaming query (after MicroBatchExecution has finished triggerExecution phase at the end of a streaming batch)
QueryTerminatedEvent¶
Intercepted by onQueryTerminated
Posted when StreamExecution is requested to run stream processing (and the streaming query was stopped or terminated due to an error)
Registering StreamingQueryListener¶
StreamingQueryListener can be registered using StreamingQueryManager.addListener method.
val queryListener: StreamingQueryListener = ...
spark.streams.addListener(queryListener)
Deregistering StreamingQueryListener¶
StreamingQueryListener can be deregistered using StreamingQueryManager.removeListener method.
val queryListener: StreamingQueryListener = ...
spark.streams.removeListener(queryListener)