Apache Spark 3.0中的新结构化流式处理用户界面
如何通过Spark 3.0结构化流实时查询来更好地监控流数据查询——来自Databricks博客的翻译。
这篇文章是由阿里巴巴的软件工程师于根毛撰写的来宾社区的投稿。
Apache Spark 2.0介绍了结构化流处理,并证明成为构建分布式流处理应用程序的最佳平台。借助SQL/数据集/数据框架API与Spark内置功能的集成,开发人员能够处理流的聚合、流与流的连接以及窗口支持等复杂需求。自结构化流处理推出以来,我们频繁收到开发人员的询问,希望能够提供更好的流处理管理方式,与Spark流处理(DStream)的支持相同。在Apache Spark 3.0中,我们发布了专为结构化流处理设计的新用户界面。
通过新的结构化流媒体用户界面,提供所有流媒体作业的有用信息和统计信息,以便在开发过程中进行调试,并改善运营时的实时度量可视性。用户界面显示两个统计信息集合:1)流媒体查询作业的汇总信息,2)涉及流媒体查询的详细统计信息,包括输入速率、处理速率、输入行数、批处理持续时间、操作持续时间等。
流媒体查询作业的汇总信息

通过点击”LAN ID”,您可以查看流查询的详细统计信息。
详细统计信息

这里包括以下指标。
Input Rate: (全てのソースから)到着するデータのレートの集計値。
Process Rate: Sparkが(全てのソースからの)データを処理するレートの集計値。
Batch Duration: それぞれのバッチに要する時間。
Operation Duration: 様々なオペレーションに要した時間(m秒)
以下是追踪操作的内容。
addBatch: マイクロバッチがソースから入力データを読み込み、処理し、シンクにバッチの出力を書き出すのに要する時間。これはマイクロバッチの処理時間の大部分を占めます。
getBatch: ソースから現在のマイクロバッチの入力を読み込むための論理的クエリーを準備に要する時間。
getOffset: 新たな入力なデータがあるかどうかをソースに問い合わせるのに要する時間。
walCommit: メタデータログへのオフセットの書き込み。
queryPlanning: 実行計画の生成。
需要注意的是,并不是所有的操作都会显示在用户界面上。因为每个数据源有不同类型的不同操作,所以列出的操作可能只会在一个流查询中执行一部分。
通过用户界面进行流媒体性能故障排除。
我们来看一下这里的新结构化流媒体UI,它会通知我们发生了奇怪的事情的情况。在高层次上,我们使用以下演示查询,并在每种情况下提出一些假设条件。
import java.util.UUID
val bootstrapServers = ...
val topics = ...
val checkpointLocation = "/tmp/temporary-" + UUID.randomUUID.toString
val lines = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", bootstrapServers)
.option("subscribe", topics)
.load()
.selectExpr("CAST(value AS STRING)")
.as[String]
val wordCounts = lines.flatMap(_.split(" ")).groupBy("value").count()
val query = wordCounts.writeStream
.outputMode("complete")
.format("console")
.option("checkpointLocation", checkpointLocation)
.start()
由于处理能力不足而导致延迟增加。

稳定但延迟较高


利用操作持续时间图表进行故障排除。
操作持续时间图表显示执行各种操作所需的时间(以毫秒为单位)。这对于理解每个批次的时间分布很有用,并且可以方便地进行故障排除。让我们以Apache Spark社区中的性能改进“SPARK-30915: 避免读取元数据日志文件时检测到最新批次ID”为例。


未来的开发计划
如上所示,通过新的结构化流媒体UI,开发者可以使用更有益的流媒体查询信息来监视流媒体作业。在初始发布版本中,新的UI仍在开发中,并将在将来的发布中得以改进。尽管不是全部,但以下功能将在未来实施计划中包括:
-
- ストリーミングクエリー実行詳細の追加: 遅延データ、ウォーターマーク、状態、メトリクスなど。
-
- Sparkヒストリーサーバーにおける構造化ストリーミングUIのサポート。
- レーテンシーの発生など異常事態に対応するためのティップス。
尝试新的用户界面
请尝试使用最新的Databricks Runtime 7.1支持的Apache Spark 3.0的Spark Streaming UI。如果您正在使用Databricks笔记本,则可以查看笔记本中流查询的状态,并提供简单的查询管理方式。Databricks可以在几分钟内免费开始使用,无需注册信用卡。
Databricks 免费试用
在中国,Databricks 提供免费试用版。