Я тоже столкнулся с этой проблемой.
Вы правы в своих наблюдениях по 2 вариантам, т.е.
- потенциальная потеря данных, если
startingOffsets
установлен на latest
- дублировать данные, если *Для 1010 * установлено значение
earliest
Однако ...
Существует возможность создания контрольных точек путем добавления следующего параметра:
.writeStream
.<something else>
.option("checkpointLocation", "path/to/HDFS/dir")
.<something else>
В случае сбоя Spark просматривает содержимое этого каталога контрольных точек, восстанавливает состояние, прежде чем принимать какие-либо новые данные.
Я нашел эту полезную ссылку на том же.
Надеюсь, это поможет!