Я читаю сообщения от Кафки в приложении Spark Streaming.
Продолжительность SparkBatch: 15 сек.SparkWindow: 60 сек.
var dstream = KafkaUtils.createDirectStream() // ignore the argumtns
var windowedStream = dstream.window(SparkWindow)
// delete data from REDIS
windowedStream.foreachRDD(rdd -> {
if(!rdd.isEmpty()) {
JavaFutureAction<Void> v = rdd.foreachPartitionAsync(t -> {
// collect error data across partitions and write those to REDIS
})// foreachPartitionAsync ends
}
})
// fetchFromREDISAndProcess() --Once foreachRDD ends. fetch error data from REDIS and process them
Есть ограничения, что мне нужно сначала собрать записи об ошибках из каждого раздела и RDD в окне искры, а затем обработать их на драйвере.
Я получу4 RDD в каждом окне Spark.
Проблема: Я хочу читать данные из REDIS после каждого окна и обрабатывать их, прежде чем переходить к следующему окну.Есть ли способ гарантировать, что я выполняю свой код каждый раз, когда заканчивается окно свечи?