Можем ли мы использовать потоковую передачу Spark для событий, основанных на времени - PullRequest
0 голосов
/ 06 января 2019

У меня есть следующее требование

  1. Существует несколько устройств, выдающих данные в зависимости от конфигурации устройства. например, есть два устройства, которые генерируют данные с собственными интервалами, скажем, d1 производит каждые 15 минут и d2 производит каждые 30 минут
  2. Все эти данные будут отправлены Кафке
  3. Мне нужно использовать данные и выполнять расчеты для каждого устройства на основе значений, полученных за текущий час, и первого значения, полученного за следующий час. Например, если d1 генерирует данные для каждых 15 минут с 12:00 до 01:00, тогда вычисление основывается на значениях, полученных за этот час, и на первом значении, полученном с 1:00 до 02:00. Если значение не создается с 1:00 AM до 2:00 AM, тогда мне нужно рассмотреть данные с 12:00 AM до 1:00 AM и сохранить их в хранилище данных (временной ряд)
  4. Таким образом, количество устройств будет n, и каждое устройство имеет свою конфигурацию. В приведенном выше сценарии устройства d1 и d2 выдают данные за каждый 1 час. Могут быть и другие устройства, которые будут генерировать данные каждые 3 часа, 6 часов.

В настоящее время это требование выполняется на Java. Поскольку количество устройств увеличивается, так как вычисления увеличиваются, я хотел бы знать, может ли Spark / Spark Streaming быть применена к этому сценарию? Любыми статьями, касающимися такого рода требований, можно поделиться, так что это будет очень полезно.

1 Ответ

0 голосов
/ 06 января 2019

Если, и это очень важно, если вычисления будут проводиться на устройстве, вы можете использовать тематические разделы и масштабировать количество разделов в соответствии с количеством устройств. Сообщения доставляются в порядке на раздел . Это самая мощная идея, которую вам нужно понять.

Однако, несколько слов предостережения:

  • Количество тем может увеличиться, если вы хотите уменьшить, вам может потребоваться очистить темы и начать заново.
  • Чтобы обеспечить равномерное распределение устройств, вы можете назначить guid каждому устройству.
  • Если в расчетах не используются какие-либо библиотеки машинного обучения, и они могут выполняться на простом Java, то для этого может быть полезно использовать для этого простых старых потребителей (или потоков) вместо абстрагирования их с помощью Spark-Streaming. Чем ниже уровень, тем больше гибкость.

Вы можете проверить это. https://www.confluent.io/blog/how-choose-number-topics-partitions-kafka-cluster

...