我有一个简单的工作,触发器= 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]
}
}
谢谢!
答案 0 :(得分:1)
您应该通过查看StreamingQuery.lastProgress.durationMs
来找到问题的答案。
按照计算顺序,以下持续时间告诉您:
getOffset
是从所有来源获得抵消的时间
getBatch
是时候从所有来源(按顺序逐个)获取流数据集(也称为批次)。
addBatch
是将流数据集写入接收器的时间
据说......
是否可以找到从Kafka下载邮件需要多长时间?
那是addBatch
持续时间(因为那时数据集作为执行者的RDD执行)
是否可以了解从触发器执行= 44秒后从Kafka下载99998行所花费的时间?
您必须将addBatch
数组中的StreamingQuery.recentProgress
个持续时间加起来。
答案 1 :(得分:0)
由于从Kafka读取和读取记录的处理是流水线的,因此很难找到准确的读取时间。
很多时候这并不重要,因为处理是瓶颈,而不是从卡夫卡读书。所以真正的问题是,你为什么关心确切的卡夫卡读取时间?