Убивая искру потоковой работы, когда нет активности - PullRequest
0 голосов
/ 10 июня 2019

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

var counter = 0

myDStream.foreachRDD {
  rdd =>
    if (rdd.count() == 0L)
    {
      counter = counter + 1
      if (counter == 40) {
        ssc.stop(true, true)
      }
    } else {
      counter = 0
    }
}

Есть ли лучший способ сделать это?Как сделать переменную доступной для всех получателей и обновить переменную на 1, когда нет активности?

1 Ответ

1 голос
/ 10 июня 2019

Используйте таблицу NoSQL, такую ​​как Cassandra или HBase, чтобы сохранить счетчик.Вы не можете обрабатывать потоковый опрос внутри цикла.Реализуйте ту же логику, используя NoSQL или Maria DB, и выполните постепенное завершение работы потокового задания, если никаких действий не происходит.То, как я это сделал, я поддержал таблицу в Maria DB для потоковой передачи JOB с интервалом опроса 5 минут.Каждые 5 минут он попадает в базу данных и записывает количество использованных записей, а метод возвращает количество записей с нулевым количеством записей за последнюю отметку времени.Это очень помогло мне в управлении потоковым заданием.Также эта таблица обычно помогает мне автоматически запускать потоковое задание на основе логики, написанной в сценарии оболочки

...