首页 文章

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

提问于
浏览
1

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

问题是,当我停止工作(维护,代码更改等)时,即使使用保存点,我也必须在重新开始时将重复数据写入redis或丢失一些数据,因为据我所知, redis sink对语义没有保证(确切/至少/最多一次) .

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

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

  • 收到关机信号(取消作业?)

  • 停止从kafka读取并提交偏移量(已在连接器内完成?)

  • 完成处理剩余数据(窗口很短 - 翻滚窗口15秒,处理时间)

  • 将最后一个窗口的最后一个输出写回redis

  • 关闭工作

这可能吗?关于如何处理停机时间(计划/计划外)的任何其他想法都将受到欢迎 .

1 回答

  • 0

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

相关问题