当前,我们将从卡夫卡消耗的偏移量手动存储到函数.transform()
中的s3中。
但是.transform()
给出了多个有效批次。例如,队列中有一个活动的处理批次,其余10个活动的批次。
我们希望将它们减少为一个或两个活动批次。
基于本文(http://aseigneurin.github.io/2016/05/07/spark-kafka-achieving-zero-data-loss.html),我们实现了.foreachRDD()
来手动存储偏移量。
由于该文章说:
We are using the foreachRDD() method and return the initial DStream so that you can apply any operation to it. The way Spark works, it will not move to the next batch until all the operations on a batch are completed. This means, if your operations takes longer than the batch interval to process, the next offsets saving operation will not kick in before the previous batch has completed. You’re safe.
此代码更改的确减少了两个活动批次,但是在完成两个活动批次后,流式应用程序会自动“完成”。
基于上述情况,是否有任何改善或解决问题的建议?
谢谢。