1

在我们的 spark 应用程序中,我们使用 Kafka 流并将数据存储到 Cassandra DB。

首先,我们在没有背压的情况下运行了流,并且遇到了一个奇怪的异常,其中处理时间是恒定的 ~ 1 分钟,但是调度延迟正在增加。以这种方式,队列堆积如山,最终使流崩溃。

任何想法为什么会发生这种情况?如果不是处理,什么会导致如此严重的延迟? 在此处输入图像描述

然后我们尝试使用背压(增加maxRatePerPartition)进行相同的设置,最初,一切运行良好。背压完成了它的节流工作,我们能够以大约100K/分钟的恒定速率进行处理。

然后几个小时后,发生了一些事情,速率迅速下降到5K / 分钟。处理时间只有 5-6 秒,没有调度延迟,但背压荒谬地将速率保持在 5k/分钟,并且从未增加。实际上,根本没有理由将速度降低到 5K。

我们的设置:

Window: 1 minute
spark.streaming.kafka.maxRatePerPartition = 500 (4 partition * 60 sec * 500 = 120K / window)
spark.streaming.backpressure.enabled = true
spark.streaming.kafka.allowNonConsecutiveOffsets = true
spark.streaming.kafka.consumer.cache.enabled = false

具有 1 个主节点和 2 个工作节点的 Spark 集群

4

0 回答 0