Flink关闭挂钩以最大限度地减少数据丢失/重复

时间:2017-02-03 13:39:31

标签: apache-flink flink-streaming

我有一个从kafka读取数据的flink作业,从redis读取一些内容然后将聚合的窗口数据写入redis接收器(redis写入实际上是调用加载到redis中的lua脚本来增加现有值,所以我可以只在这里递增而不是更新)。

问题在于,当我停止工作(维护,代码更改等)时,即使使用保存点,我也必须将重复数据写入redis或在恢复时丢失一些数据,因为就我而言理解它,redis sink对语义没有保证(确切/至少/最多一次)。

问题是 - 是否有某种关闭信号可以让我干净地关闭工作以保证一次语义?

换句话说,我正在寻找的是:

  1. 收到关闭信号(取消作业?)
  2. 停止从kafka读取并提交偏移量(已在连接器内完成?)
  3. 完成处理剩余数据(窗口很短 - 翻滚窗口15秒,处理时间)
  4. 将最后一个窗口的最后一个输出写回redis
  5. 关闭工作
  6. 这可能吗?关于如何处理停机(计划/计划外)的任何其他想法都将受到欢迎。

1 个答案:

答案 0 :(得分:0)

从版本1.2开始,Flink取消了保存点操作,可以从CLI和其他API获得。请参阅docspull request