如何获得 Spark 结构化流应用程序的 kafka 消费者滞后

Jit*_*dav 3 apache-kafka apache-spark spark-structured-streaming

我正在为我的 Spark 结构化流应用程序构建监控,并且需要获取 Spark 应用程序所使用的某个主题的消费者滞后情况。我相信 Spark 驱动程序必须意识到这种滞后,因为它拥有执行程序的所有元数据。我看不到任何方法可以从任何现有的 Spark 文档或资源中获取此指标。我检查了streaminQueryListener接口,但它的功能也有限,因为我们只能从中获取每个查询指标。

mik*_*ike 6

跟踪结构化流作业的消费者滞后的挑战在于,结构化流不会向 Kafka提交任何偏移量(请参阅此处了解更多详细信息)。因此,Kafka并不知道Structured Streaming作业的实际进度。

另一方面,Spark 无法洞察当前位于 Kafka 主题中的消息/偏移量。

为了监控消费者滞后,您需要将这些信息整合在一起:

  • 不断请求 TopicPartition 中的最新偏移量
  • 持续检查结构化流应用程序处理的当前偏移量

例如,您可以创建一个 Kafka并在调用AdminClient期间从 Kafka 获取所需的信息。在该方法中,您需要将提到的最新事件的偏移量与 Kafka 中实际可用的最高偏移量进行比较。onQueryProgressStreamingQueryListener