显示 Spark 结构化流作业消耗的事件数

Display number of events consumed by a Spark Structured streaming job

我有 2 个线性 Spark 结构化流作业,可将数据从一个 kafka 主题复制到另一个。

是否可以 publish/view Spark UI 中的事件数 consumed/produced?

Spark Web UI 中的“流媒体选项卡”不适用于结构化流媒体,仅适用于直接 API。从版本 3.x 开始可用。

但是,还有另一种简单的方法可以显示 Spark Structured Streaming 作业处理的事件数。

您可以使用 StreamingQueryListener

import org.apache.spark.sql.streaming.StreamingQueryListener
import org.apache.spark.sql.streaming.StreamingQueryListener.QueryProgressEvent


class CountNumRecordsListener extends StreamingQueryListener {

  override def onQueryStarted(event: StreamingQueryListener.QueryStartedEvent): Unit = { }

  override def onQueryProgress(event: QueryProgressEvent): Unit = {
    println(s"""numInputRows: ${event.progress.numInputRows}""")
  }

  override def onQueryTerminated(event: StreamingQueryListener.QueryTerminatedEvent): Unit = { }
}

然后 class 您可以向您的流应用程序添加一个侦听器(其中 spark 是您的 SparkSession)。

val countNumRecordsListener = new CountNumRecordsListener
spark.streams.addListener(countNumRecordsListener)

StreamingQueryProgress class 提供了更多信息,可帮助您了解流式处理作业的数据处理。