我有直接流媒体的火花流,我正在使用下面的配置
批处理间隔 60s
spark.streaming.kafka.maxRatePerPartition 42
auto.offset.reset 最早
当我开始使用最早选项的流式批处理时,为了更快地使用来自 Kafka 的消息并减少延迟,我将 spark.streaming.kafka.maxRatePerPartition 保持为 42。所以它应该消耗 42 x 60s x 60 分区 = 每批 151200 条记录.
我这里有两个问题
- 我看到这两个初始批次正确地消耗了 151200 条记录,尽管有很多记录要从 kafka 消耗,但在后面的批次中逐渐减少。请看下面的截图。可能是什么原因
- 我看到批次正在排队很多。我们怎样才能避免这种情况。
是否有可能实现以下场景我们将批处理间隔设置为 60s,如果每个批处理在 60s 内运行,则下一个批处理可以按时开始。如果一个批次的时间超过 60 秒,我们不希望下一批来排队。现有运行完成后,下一次运行可以通过选取该时间之前的记录来开始。这样我们就不会有滞后,也不会排队。