2017-02-03 27 views
1

我有一個flink作業,從kafka讀取數據,是否從redis中讀取數據,然後將聚合的窗口數據寫入redis sink(redis寫入實際上是調用加載的lua腳本到增加現有值的redis中,所以我只能在這裏遞增而不更新)。Flink關閉掛鉤以最大限度地減少數據丟失/複製

問題在於,當我停止作業(維護,代碼更改等)時,即使使用保存點,我仍然必須在重新啓動時將重複數據寫入redis或丟失一些數據,因爲儘可能我明白了,redis sink沒有關於語義的保證(完全/至少/最多一次)。

問題是 - 是否有某種停機信號,可以讓我乾淨地關閉作業以保證一次語義?

換句話說,我要找的是:

  1. 收到關機信號
  2. 停止從卡夫卡讀取和提交的偏移量(已完成(從取消工作?) ?在連接器內部)
  3. 處理完的剩餘數據(窗口是非常短 - 15秒,處理時間)
  4. 寫最後窗口的最後輸出翻滾窗口回Redis的
  5. 關機噸他的工作

這可能嗎?歡迎任何關於如何處理停機(計劃/未計劃)的其他想法。

回答

0

從版本1.2開始,Flink取消了保存點操作,可以從CLI和其他API中獲得保存點操作。請參閱docspull request

相關問題