2017-02-08 18 views
0

我有一個從Aws Kinesis讀取數據的流式應用程序。Spark與Kinesis流 - 如何強制檢查點?

默認情況下,當您創建流接收器時,您可以選擇在哪個間隔上執行檢查點,這是在DynamoDB上完成的。

在某個時候我想停止我的應用程序(sparkStreamingContext.stop()),但在此之前我想強制檢查點。

有沒有可能這樣做?

我知道如果檢查點位於文件系統上,我應該做sparkStreamingContext.checkpoint(directoryName),但是kinesis的檢查點位於DynamoDB上,所以我該怎麼做?

謝謝!

回答

0

強制檢查點是不可能的。 Checkpointing是Spark的一個實現細節,用於恢復和保證消息傳遞,因此您不能簡單地「調用檢查點」。

如果您確實想要控制何時保存數據,您還需要自己管理狀態。

+0

好的,sparkStreamingContext.checkpoint(directoryName)函數的作用是什麼?我怎樣才能保證,當我停止應用程序時,只有我處理的數據是檢查點,並不是所有數據都被接收到(例如,如果我的微量批次晚了,並且需要超過微量批次間隔才能完成?) – nicola

+0

@nicola它告訴Spark它應該檢查點到哪個目錄。你可以做的最好的是通過'sparkConf.set(「spark.streaming.stopGracefullyOnShutdown」,「true」)設置正常關機' –