我有一個簡單的Spark應用程序,它從Kafka讀取數據,然後在http端點(或另一個kafka--對於這個問題讓我們考慮http)轉換後發送這些數據。我使用job-server提交作業。暫停Spark Streaming作業
我目前正在開始消耗源自「auto.offset.reset」=「最小」且間隔= 3s的kafka。在快樂的情況下,一切都很好。下面是摘錄:
kafkaInputDStream.foreachRDD(rdd => {
rdd.foreach(item => {
//This will throw exception if http endpoint isn't reachable
httpProcessor.process(item._1, item._2)
})
})
由於「auto.offset.reset」 =「最小」,這在處理一個任務大約200K的消息。如果我停止http服務器中間工作(模擬POSTing中的某個問題),並且httpProcessor.process拋出異常,那個Job失敗,任何未處理的內容都將丟失。我發現它每隔3秒就會持續輪詢。
所以我的問題是:
- 是我的假設正確,如果在未來3的第二職業,如果它得到了X的消息,只有ÿ可以打一個錯誤之前被處理,其餘的X-Y將不會被處理?
- 有沒有辦法暫停卡夫卡的流/消費?例如,如果存在間歇性網絡問題,並且很可能在此期間消耗的所有消息都將丟失。一些不斷重試(可能是指數退避)並且每當http結束點UP時,再次開始消費。
感謝
如果在處理特定作業階段時遇到網絡故障,可以傳播(拋出)異常以使整個作業失敗,並重播失敗的整個批處理。這確實有一些開銷,只有在您的DAG是透明的時候纔有效。 –