如何计算从Kafka获取记录的时间?

时间:2017-08-25 06:09:08

标签: apache-spark apache-kafka spark-structured-streaming

我有一个简单的工作,触发器= 15秒,Source = Kafka和Sink = S3。是否有可能找到从Kafka下载邮件需要多长时间?或者说如果我有Sink = Console,它会带回驱动程序上的数据,是否可以找到从Kafka下载数据的时间以及将它带回驱动程序的时间?

从驱动程序我在写入S3时获取这些查询。是否可以理解从triggerExecution = 44秒开始从Kafka下载99998行所花费的时间?

Streaming query made progress: {
  id : 1383g52b-8de4-4e95-a3s9-aea73qe3ea56,
  runId : 1206f5tc-t503-44r0-bc0c-26ce404w6724,
  name : null,
  timestamp : 2017-08-25T01:42:10.000Z,
  numInputRows : 99998,
  inputRowsPerSecond : 1666.6333333333334,
  processedRowsPerSecond : 2263.9860535669814,
  durationMs : {
    addBatch : 42845,
    getBatch : 3,
    getOffset : 68,
    queryPlanning : 6,
    triggerExecution : 44169,
    walCommit : 1245
  },
  stateOperators : [ ],
  sources : [ {
    description : KafkaSource[Subscribe[kafka_topic]],
    startOffset : {
      kafka_topic : {
        2 : 20119244,
        4 : 20123550,
        1 : 20124601,
        3 : 20113622,
        0 : 20114208
      }
    },
    endOffset : {
      kafka_topic : {
        2 : 20139245,
        4 : 20143531,
        1 : 20144592,
        3 : 20133663,
        0 : 20134192
      }
    },
    numInputRows : 99998,
    inputRowsPerSecond : 1666.6333333333334,
    processedRowsPerSecond : 2263.9860535669814
  } ],
  sink : {
    description : FileSink[s3://s3bucket]
  }
}

谢谢!

2 个答案:

答案 0 :(得分:1)

您应该通过查看StreamingQuery.lastProgress.durationMs来找到问题的答案。

按照计算顺序,以下持续时间告诉您:

  • getOffset是从所有来源获得抵消的时间

  • getBatch是时候从所有来源(按顺序逐个)获取流数据集(也称为批次)。

  • addBatch是将流数据集写入接收器的时间

据说......

  

是否可以找到从Kafka下载邮件需要多长时间?

那是addBatch持续时间(因为那时数据集作为执行者的RDD执行)

  

是否可以了解从触发器执行= 44秒后从Kafka下载99998行所花费的时间?

您必须将addBatch数组中的StreamingQuery.recentProgress个持续时间加起来。

答案 1 :(得分:0)

由于从Kafka读取和读取记录的处理是流水线的,因此很难找到准确的读取时间。

很多时候这并不重要,因为处理是瓶颈,而不是从卡夫卡读书。所以真正的问题是,你为什么关心确切的卡夫卡读取时间?