2017-02-07 10 views
2

У нас есть Spark Streaming application, работающий на кластере YARN.Spark Streaming - пакетный интервал против времени обработки

Он получает сообщения от Kafka topics.

Фактически наше время обработки больше, чем интервал между партиями.

Batch Interval : 1 Minute 
Processing Time : 5 Minutes 

Я хотел бы знать, что произойдет, если некоторые данные, полученные в период между временем обработки, будут данные доступны в памяти до обработки более. Или это будет отменено при последующих сборах данных?

Мы используем Direct Streaming approach для получения данных из тем Kafka.

Должен ли я пойти с Window based операций? например, если у меня есть Window length as 5 Minutes and Sliding interval as 2 Minutes and Batch Interval as 1 Minute, будет ли это работать? Потому что мы не можем потерять какие-либо данные в нашем приложении.

ответ

4

В режиме прямой потоковой передачи данные не считываются приемником, а затем отправляются другим работникам. Случается, что драйвер считывает смещения от Kafka, а затем отправляет каждый раздел с подмножеством смещений для чтения.

Если ваши работники не закончили обработку предыдущего задания, они не начнут обрабатывать следующий (если вы явно не установили spark.streaming.concurrentJobs более чем на 1). Это означает, что смещения будут прочитаны, но на самом деле не отправят исполнителям, ответственным за чтение данных, таким образом, никаких данных не будет потеряно.

Что это значит, так это то, что ваша работа будет бесконечно опоздать и вызвать массовые задержки обработки, чего вы не хотите. Как правило, любое время обработки заданий Spark должно быть меньше интервала, установленного для этой работы.

+1

Спасибо за ваш своевременный и отличный ответ .. – Shankar