我有一个火花流式传输作业,可以从多个kinesis流中读取,并在一个流式上下文中将它们结合在一起。
val streams = ingestionStreams.map(streamName => {
KinesisInputDStream.builder.checkpointAppName(s"${jobName}_$streamName")
.streamName(streamName)
.streamingContext(ssc)
.endpointUrl(endpointUrl)
.regionName(regionName)
.initialPositionInStream(InitialPositionInStream.TRIM_HORIZON)
.checkpointInterval(kinesisCheckpointInterval)
.storageLevel(StorageLevel.MEMORY_ONLY)
.buildWithMessageHandler(KinesisRecordHandler.recordHandler)
})
import spark.sqlContext.implicits._
ssc.union(streams)
.checkpoint(batchInterval)
.foreachRDD(jsonRdd => ...)
我在UI中的Spark Streaming标签中看到了正确的记录数。但是,foreachRDD
处理的实际记录数量较少。
在执行程序日志中,我看到很多ProvisionedThroughputExceededException
但是应该是良性的,因为KCL应该重试这些记录。
不幸的是,我没有看到日后处理丢失的记录。在哪里看下一个?