我有一个从Kafka主题读取的Spark Streaming应用程序 我手动管理偏移量以进行恢复。 当我使驱动程序崩溃时,它会自动重新启动,并且写入Kafka主题的最后一个偏移量看起来不错。 但是我怀疑它在执行程序完成之前就写了偏移量,所以我在崩溃之前丢失了最后一块数据。
kafkaSparkInputDStream.foreachRDD(rdd -> {
OffsetRange[] offsetRanges = ((HasOffsetRanges) rdd.rdd()).offsetRanges();
Object results = yourCalculation(rdd);
rdd.for (OffsetRange offsetRange : offsetRanges) {
if (offsetRange.count() >0) {
System.out.println("offsetRange. from [" + offsetRange.fromOffset() +"] until[" + offsetRange.untilOffset()+ "]. count [" + offsetRange.count()+ "] partition [" +offsetRange.partition()+"]" );
}
}
((CanCommitOffsets) kafkaSparkInputDStream.inputDStream()).commitAsync(offsetRanges);