[英]Spark streaming with kafka - restarting from checkpoint
我們正在使用 Spark Streaming 和 Kafka 構建容錯系統,並正在測試檢查點 Spark 流,以便我們可以選擇在 Spark 作業因任何原因崩潰時重新啟動它。 這是我們的火花過程的樣子:
我們想要實現的是一種設置,我們可以在其中關閉 Spark 流作業(以模擬故障),然后重新啟動它,並且仍然確保我們處理來自 Kafka 的每條消息。 這似乎工作正常,但是,這是我所看到的,我不知道該怎么做:
對此的任何意見將不勝感激:
這是預期的嗎? 為什么在不處理任何數據時創建批次
這就是 Sparks 容錯語義所保證的,即使您的服務失敗,它也可以從最后處理的時間點恢復並繼續處理。 Spark 正在讀取檢查點數據並啟動恢復過程,直到它到達當前時間點。 Spark 不知道 0 個事件批次,因此不會對它們進行優化。
看起來這些消息正在處理中,但我在 UI 上沒有看到任何輸入大小為 4800 的批處理
這可能由於各種原因而發生。 一個常見的情況是,如果您將 Sparks 背壓標志設置為 true。 Spark 發現您有明顯的處理延遲,因此它減少了每批讀取的消息數量,以便讓流式作業趕上進度。
這是預期的嗎? 為什么在不處理任何數據時創建批次
實際上,Spark Streaming with Kafka,當從checkpoint 恢復時,spark 會先生成jobs。 所有數據都在一個或多個批次中處理(這取決於某些配置),而在 web ui 中,您只能看到所有那些以 0 事件執行的恢復批次。
還有第二件事令人困惑......
是的,從 web ui 來看,這很令人困惑。 嘗試為每個批次計算事件 num,打印 num。
DStream.foreachRDD(println(_.count))
您會發現 Spark 確實處理由檢查點創建的批處理,而在 web ui 中,事件編號為 0。
如果您的應用程序在從故障中恢復后發現很難在一個批次中處理所有事件,那么如何控制 Spark 創建的批次數?
嘗試搜索 spark.streaming.kafka.maxRatePerPartition => 使用新的 Kafka 直接流 API 時將從每個 Kafka 分區讀取數據的最大速率(每秒記錄數)。
MaxRatePerPartition* partitionOfKafka* YourStreamingBatchDuration * N = eventsNumToProcess
N => After recovered from checkpoint, the num of batches spark need to process.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.