Исправлять потоки нескольких источников, перезагружать данные - программирование

Исправлять потоки нескольких источников, перезагружать данные

У меня есть информация о событиях контекста с искровым потоком из кафки с интервалами в 10 секунд. Я хотел бы дополнить эти данные события существующими данными в таблице postgres.

Я могу загрузить таблицу postgres с чем-то вроде:

val sqlContext = new SQLContext(sc)
val data = sqlContext.load("jdbc", Map(
  "url" -> url,
  "dbtable" -> query))

...

val broadcasted = sc.broadcast(data.collect())

И позже я могу пересечь его следующим образом:

val db = sc.parallelize(data.value)
val dataset = stream_data.transform{ rdd => rdd.leftOuterJoin(db)}

Я хочу, чтобы мой текущий поток данных работал и все еще перезагружал эту таблицу каждые 6 часов. Поскольку испуганность apache в данный момент не поддерживает несколько запущенных контекстов, как я могу это сделать? Есть ли обходной путь? Или мне нужно будет перезапустить сервер каждый раз, когда я хочу перезагрузить данные? Это кажется таким простым случаем...:/

4b9b3361

Ответ 1

По моему скромному мнению, перезагрузка другого источника данных во время преобразований в DStreams не рекомендуется по дизайну.

По сравнению с традиционными моделями потоковой обработки stateful D-Streams предназначен для структурирования потокового вычисления как серии пакетных вычислений stateless, deterministic на малых временных интервалах.

Преобразования в DStreams являются детерминированными, и эта конструкция позволяет быстро восстановить из-за ошибок путем пересчета. Освежающий эффект принесет побочный эффект для восстановления/пересчета.

Одним из способов является отложить запрос к выводам, например: foreachRDD(func).