У нас есть приложение Spark Streaming, оно считывает данные из очереди Kafka в приемнике и выполняет некоторые преобразования и вывод в HDFS. Интервал между партиями составляет 1 мин, мы уже настроили параметры противодавления и spark.streaming.receiver.maxRate
, поэтому он отлично работает в большинстве случаев.Spark Streaming Kafka противодавление
Но у нас все еще есть одна проблема. Когда HDFS полностью опустится, пакетное задание будет долгое время зависать (скажем, HDFS не работает в течение 4 часов, и работа будет висеть в течение 4 часов), но получатель не знает, что задание еще не закончено , поэтому он все еще получает данные в течение следующих 4 часов. Это вызывает исключение OOM, и все приложение не работает, мы потеряли много данных.
Итак, мой вопрос: позволяет ли приемник знать, что задание не заканчивается, поэтому он получит меньше (или даже нет) данных, и когда работа закончится, он начнет получать больше данных, чтобы догнать , В вышеуказанном условии, когда HDFS не работает, приемник будет считывать меньше данных из Kafka, а блок, сгенерированный в течение следующих 4 часов, действительно мал, приемник и все приложение не опускаются после того, как HDFS в порядке, приемник будет читать больше данных и начать догонять.
Не пропустите ссылку, хороший и подробный анализ .. – raksja