flink关闭hook以最小化数据丢失/重复

pzfprimi  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(493)

我有一个flink作业,它从kafka读取数据,从redis执行一些读取,然后将聚合的窗口数据写入redis接收器(redis写入实际上是调用加载到redis中的lua脚本,该脚本递增现有值,因此我只能在此处递增而不能更新)。
问题是,当我停止作业(维护、代码更改等)时,即使使用保存点,我也必然会将重复数据写入redis,或者在恢复时丢失一些数据,因为据我所知,redis sink对语义没有任何保证(准确地/至少/最多一次)。
问题是-是否有某种关闭信号可以让我彻底关闭工作,以保证只执行一次?
换句话说,我想要的是:
接收关机信号(来自取消作业?)
停止从kafka读取并提交偏移量(已经在连接器内部完成了吗?)
完成剩余数据的处理(窗口非常短-滚动窗口为15秒,处理时间)
将最后一个窗口的最后一个输出写回redis
关闭作业
这有可能吗?任何关于如何处理停机(计划内/计划外)的其他想法都将受到欢迎。

vq8itlhq

vq8itlhq1#

从版本1.2开始,flink有一个cancel with savepoint操作,可以从cli和restapi获得。查看文档和拉取请求。

相关问题