我们正在将DB中的kafka偏移存储为检查点。这有助于在重新启动应用程序时消除零消息。
有一种情况,当我们重新启动spark应用程序时,偏移量不在kafka中(由于升级或在docker中运行而被清除)。在这种情况下,spark app会抛出错误
java.lang.IllegalArgumentException: requirement failed: numRecords must not be negative
我们想在这种情况下重新启动app并从最新的偏移中读取。
try{
KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder, (String, String)](
ssc, kafkaParams, fromOffset, msgHandler)
} catch {case ex: Exception => {
KafkaUtils.createDirectStream[String, String,
StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet)
}
}
添加try / catch并从最新的偏移开始对此没有帮助。由于错误发生在执行程序中。有没有办法从火花司机处理这个?