2017-04-16 239 views
1

我已經設置了一個具有2個JobManager和3個TaskManager的Flink1.2獨立羣集,我使用JMeter通過生成Kafka消息/事件來加載測試它,然後處理它。處理作業在TaskManager上運行,通常需要約15K事件/秒。
該作業設置了EXACTLY_ONCE檢查點,並將狀態和檢查點保存到Amazon S3。 如果我關閉運行作業的TaskManager,則需要幾秒鐘,然後在不同的TaskManager上繼續作業。作業主要記錄連續整數的事件id(例如從0到1200000)。
當我檢查TaskManager上的輸出時,我關閉了最後一個計數,例如500000,然後當我在不同的TaskManager上檢查恢復的作業上的輸出時,它以〜400000開始。這意味着~100K的重複事件。這個數字取決於測試的速度可以更高或更低。
不知道我是否遺漏了一些東西,但我希望作業在不同的TaskManager上恢復後顯示下一個連續的數字(如500001)。
有誰知道這是爲什麼發生/額外的設置,我必須配置獲得一次?靈活處理一次消息處理

回答

7

您正好看到預期的行爲。 Flink在出現故障時通過檢查點和重放的組合實現容錯功能。保證並不是每個事件只會被髮送到管道中一次,而是每個事件只會影響管道的狀態一次。

點校驗在整個羣集中創建一致的快照。在恢復期間,操作員狀態將恢復,並且來源將從最近的檢查點重播。

有關更詳盡的說明,請參閱該數據工匠博客文章:High-throughput, low-latency, and exactly-once stream processing with Apache Flink™,或the Flink docs