Почему мини-партии Spark Stream более продолжительны на окнах? - PullRequest
0 голосов
/ 04 декабря 2018

Я создал тему в kafka под названием «test», в которой есть только один раздел, и он не реплицируется.

Я создал производителя Kafka, который пишет по теме «test» следующую строку: «ABCA "в цикле 100000 итераций.Существует 1000 мс сна между итерациями (Thread.sleep).Ключ - это индекс итерации каждого цикла.

Я запустил следующий код как в Centos 7, так и в Windows.Я обычно строю толстую банку, используя плагин сборки maven, и запускаю ее с помощью spark-submit.Я всегда должен указывать пакеты при отправке jar: --packages org.apache.spark: spark-sql-kafka-0-10_2.11: 2.4.0

public class StreamFromKafka {

    public static void es() throws StreamingQueryException {
        SparkSession session = SparkSession.builder().appName("streamFromKafka").master("local[*]").getOrCreate();

        String columnName = "value";

        Dataset<Row> df = session.readStream().format("kafka")
                .option("group.id","test-consumer-group")
                .option("kafka.bootstrap.servers", "localhost:9092")
                .option("subscribe", "test").load();

        Dataset<Row> df1 = df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)").select(columnName);

        Dataset<String> words = df1.as(Encoders.STRING()).flatMap(line -> Arrays.asList(line.split(" ")).iterator(), Encoders.STRING());

        //comment1 --> StreamingQuery query0 = words.writeStream().outputMode("update").format("console").start();

        //comment2 --> query0.awaitTermination();

        Dataset<Row> wordCount = words.groupBy("value").count();

        StreamingQuery query = wordCount.writeStream().outputMode("update").format("console").start();

        query.awaitTermination();

    }

}

Если я разлагаю "comment1"и" comment2 "в приведенном выше коде, таблица печатается быстро на окнах:

-------------------------------------------
Batch: 5
-------------------------------------------
+-----+
|value|
+-----+
|    A|
|    B|
|    C|
|    A|
|    A|
|    B|
|    C|
|    A|
+-----+

Однако, если я комментирую comment1 и comment2, мини-пакеты кажутся длительными в Windows.

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

Я оставил выполнение этой реализации на Windows больше времени, чем в Linux, вчера вечером в 20:46.Он имеет очень длинные мини-пакеты (потоковая передача в режиме реального времени создается с помощью мини-пакетов под капотом API структурированной потоковой передачи) в Windows.Так, например, как вы можете видеть на следующем рисунке, для выполнения двух пакетов требуется одна минута:

enter image description here

Как видно наНа следующем рисунке выполнение трех пакетов занимает три минуты:

enter image description here

Это быстрее в Linux.Так как я сначала попробовал это в Linux, я ожидал, что на Windows будет меньше времени, чтобы увидеть вывод консоли, затем, так как я ничего не вижу, я подумал, что это не работает.

Я должен рассчитывать мини-партии наLinux для сравнения поведения.

...