Я пытаюсь понять, как сделать приложение Spark Streaming более уязвимым к ошибкам (особенно при попытке записать в нисходящие зависимости), и я не знаю, как лучше всего справляться с ошибками при попытке записать результаты в внешний источник, такой как Cassandra, DynamoDB и т.д.
Например, у меня есть задача Spark Streaming, которая извлекает данные из Stream (Kafka, Flume и т.д.), я еще не доработал, какую технологию использовать), объединяет похожие элементы вместе, а затем записывает результаты на внешний магазин. (т.е. Cassandra, DynamoDB или что-то другое, получающее результаты моих вычислений DStream).
Я пытаюсь понять, как я обрабатываю случай, когда внешняя зависимость недоступна для записи. Возможно, кластер пошел вниз, возможно, есть проблемы с разрешениями и т.д., Но моя работа не может записать результаты во внешнюю зависимость. Есть ли способ приостановить Spark Streaming, чтобы получатели не продолжали пакетные данные? Должен ли я просто спать в текущей партии и позволить Получателю продолжать хранить партии? Если проблема преходяща (несколько секунд), продолжение партии может быть приемлемым, но что произойдет, если зависимость снизится на несколько минут или 1 час (ы)?
Мне показалось, что у меня был монитор, который следит за состоянием зависимостей в фоновом режиме, и если он узнает, что он "нездоровый", он прекратит работу. Затем, когда все зависимости работоспособны, я могу запустить резервное копирование задания и обработать все данные, которые не были записаны во внешний источник.
Другая мысль, которую я имел, заключалась в том, чтобы каким-то образом сигнализировать в методе DStream forEachRdd, что была проблема. Есть ли какое-то исключение, которое я могу использовать в DStream, который будет сигнализировать драйверу, что он должен остановиться?
Если у кого-то есть опыт работы с функцией External Fault Tolerance, или может указать мне хорошие статьи/видеоролики, это было бы здорово.
Спасибо