我正在执行一个火花结构化的流作业,该作业需要从kafka主题中读取数据并进行一些聚合。该作业需要每天重新启动,但是如果重新启动,那么如果设置startingOffsets="latest"
,我将丢失重新启动时间之间的数据。如果我设置了startingOffsets="earliest"
,则该作业将从主题中读取所有数据,但不会从上一个流作业留下的位置读取所有数据。谁能帮助我如何配置以将偏移量设置在最后一个流作业剩余的位置?
我使用的是 Spark 2.4.0 和 kafka 2.1.1 ,我试图为书写作业设置检查点位置,但似乎Spark并没有检查kafka消息的偏移量,以便它继续检查上一个偏移量或第一个偏移量,具体取决于startingOffsets。
这是我的火花从卡夫卡读取的配置:
val df = spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", host)
.option("subscribe", topic)
.option("startingOffsets", offset)
.option("enable.auto.commit", "false")
.load()
例如,kafka主题有10条消息,其偏移量从1到10,触发刚刚完成处理消息5,然后重新启动。我该如何使spark继续从消息5而不是从1或11读取?
答案 0 :(得分:0)
似乎可以通过一些代码获取所需的偏移量并将其保存到诸如cassandra之类的可靠存储中。然后,当火花流开始时,我只需要读取保存的偏移并将其填充到startingOffsets即可。 这是帮助我获得所需偏移量的代码
vectorizer = TfidfVectorizer(encoding='latin-1',sublinear_tf=True, max_df=0.5, stop_words='english')