Spark Structrued Streaming源码分析--(四)ProgressReporter每个流处理进度计算、StreamQueryManager管理运行的流

本文深入分析Spark Structured Streaming的ProgressReporter如何计算流处理进度,包括ProgressReporter的示例数据和计算过程,以及StreamQueryManager如何管理SparkSession中的流。着重讲解了ProgressReporter的startTrigger()和finishTrigger()方法,以及StreamQueryManager如何获取运行中的流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 ProgressReporter每个流处理进度计算

1、ProgressReporter示例数据及分析

ProgressReporter是每个StreamExecution持有的特性:

abstract class StreamExecution(
    xxx )
  extends StreamingQuery with ProgressReporter with Logging {
   
   }

在当前批次计算完成并写出到sink后,会调用ProgressReporter的finishTrigger()方法,统计当前批次的运行时长、处理数据量、offset信息等,是监控流处理性能的一个重要类。每个批次统计出来的信息及解析如下(updateProgress()方法会在日志中直接打印):

Streaming query made progress: {
  // ProgressReporter定义的id,实现在StreamExecution,可以读取offset/metadata文件的id内容,没有读取到则是创建流的时候生成,可以用于流的恢复
  "id" : "98693db5-2285-4d5c-829a-e22b637dc43f",
  // 当前流的运行id,流创建的时候,生成的随机uuid
  "runId" : "f3b0ad00-b033-42b2-a364-8c4a666e73fd",

  // 通过dataStreamWriter.queryName(name)设置的内容,可用于识别流
  "name" : "FileSink with nodeIndex:2_6, createTable:",

  // 时间戳,为机器时间,不是输入数据json解析出来的时间
  "timestamp" : "2018-08-30T06:03:50.000Z",

  // 批次号,每运行一个批次,+1
  "batchId" : 108654,

  // 上个trigger结束到当前trigger开始期间,输入的数据总量,本次设定为10s
  "numInputRows" : 310854,

  // numInputRows除以10s得到的数据
  "inputRowsPerSecond" : 31085.4,

  // numInputRows除以triggerExecution得到的速度
  "processedRowsPerSecond" : 111817.9856115108,
  "durationMs" : {
    // 数据写出到sink用时,重要的性能指标
    "addBatch" : 2674,
    "getBatch" : 2,
    "getOffset" : 33,
    "queryPlanning" : 38,
    "triggerExecution" : 2780,
    "walCommit" : 32
  },
  "eventTime" : {
    // watermark设定字段的各项指标
    "avg" : "2018-08-24T00:14:32.963Z",
    "max" : "2018-08-30T14:03:00.000Z",
    "min" : "1970-01-01T00:00:00.000Z",
    // 数据中计算出来的水印时间
    "watermark" : "2018-08-30T14:02:00.000Z"
  },

  // stateStore的状态,需要关注聚合数据量和占用的内存,100个最近version,实际每个stateStore所用内存为(memoryUsedBytes/32分区)x100
  "stateOperators" : [ {
    "numRowsTotal" : 169184,
    "numRowsUpdated" : 27670,
    "memoryUsedBytes" : 125625783
  } ],

  // kafka source的开始、结束offset,流与流join则有多个source,当前示例为一个
  "sources" : [ {
    "description" : "KafkaSource[Subscribe[NginxLogTopic]]",
    "startOffset" : {
      "NginxLogTopic" : {
        "8" : 13674827351,
        "2" : 13674826934,
        "5" : 13712751413,
        "4" : 13674827290,
        "7" : 13674832434,
        "1" : 13674832486,
        "9" : 13674832435,
        "3" : 13674832458,
        "6" : 23882070074,
        "0" : 13674827347
      }
    },
    "endOffset" : {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值