Спарк Скользящее окно - PullRequest
1 голос
/ 17 мая 2019

Я настроил конвейер для входящих событий из потока в Apache Kafka.

Spark подключается к Kafka, получает поток из темы и обрабатывает некоторые "простые" задачи агрегирования.

Поскольку я пытаюсь создать сервис, который должен иметь низкое время ожидания обновления (менее 1 секунды), я создал простое потоковое приложение Spark в Scala.

val windowing = events.window(Seconds(30), Seconds(1))

val spark = SparkSession
      .builder()
      .appName("Main Processor")
      .getOrCreate()

import spark.implicits._

// Go into RDD of DStream
windowing.foreachRDD(rdd => {
    // Convert RDD of JSON into DataFrame
    val df = spark.read.json(rdd)      

    // Process only if received DataFrame is not empty
    if (!df.head(1).isEmpty) {

    // Create a view for Spark SQL
    val rdf = df.select("user_id", "page_url")

    rdf.createOrReplaceTempView("currentView")

    val countDF = spark.sql("select count(distinct user_id) as sessions from currentView")

    countDF.show()
}

Это работает, как и ожидалось.На данный момент я беспокоюсь о производительности.Spark работает на сервере Ubuntu с четырьмя процессорами для тестирования.

Загрузка ЦП постоянно составляет около 35%.Мне интересно, если поступающие данные из потока, скажем, 500 мсг / с, как изменится загрузка ЦП?Будет ли это расти эксп.или линейным образом?

Если бы вы могли поделиться своим опытом с Apache Spark в такой ситуации, я был бы признателен.

Последний открытый вопрос: если я установлю интервал скользящего окна на500 мс (как я хотел бы) это взорвется?Я имею в виду, кажется, что функции потоковой передачи Spark являются новыми, и архитектура пакетной обработки может быть ограничением в обработке данных в реальном времени, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...