Spark结构化的流maxOffsetsPerTrigger似乎不起作用

时间:2019-06-25 15:48:50

标签: apache-spark spark-structured-streaming

我遇到了一个Spark结构化流(SSS)应用程序问题,该应用程序因程序错误而崩溃,并且周末未处理。当我重新启动它时,有很多关于主题的消息需要重新处理(关于3个主题的大约250'000条消息都需要加入)。

重新启动时,应用程序再次因OutOfMemory异常而崩溃。我从文档中了解到,在这些情况下,应该对读取流进行maxOffsetsPerTrigger配置。我更改了PySpark代码(在SSS 2.4.3 btw上运行),使所有3个主题都具有以下内容

 rawstream = (spark.readStream
    .format("kafka")
    .option("kafka.bootstrap.servers", bootstrapServers)
    .option("subscribe", topicName)
    .option("maxOffsetsPerTrigger", 10000L)
    .option("startingOffsets", "earliest")
    .load()

我的期望是,现在SSS查询将从每个主题加载〜33'000偏移,并将它们加入第一批。然后在第二批处理中,它将清理第一批处理中的状态记录,由于水印而使其到期(这将清除第一批处理中的大部分记录),然后从每个主题中读取另外的〜33k。因此,在大约8批处理之后,它应该已经处理了滞后,并具有“合理的”内存量。

但是应用程序仍然因OOM崩溃,当我在应用程序主UI中检查DAG时,它报告它再次尝试读取所有250'000条消息。

还有其他需要配置的内容吗?如何检查此选项是否真正使用? (不幸的是,当我检查计划时,该计划被截断并仅显示(Options: [includeTimestamp=true,subscribe=IN2,inferSchema=true,failOnDataLoss=false,kafka.b...),我不知道如何在圆点后显示该部分)

0 个答案:

没有答案