首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flink 定时器的4个特性

这样之后,一旦到达定时器的指定时刻,就会调用 onTimer() 方法。 onTimer() 回调函数可能会在不同时间点被调用,这首先取决于使用处理时间还是事件时间来注册定时器。...特别是: 使用处理时间注册定时器时,当服务器的系统时间到达定时器的时间戳时,就会调用 onTimer() 方法。...使用事件时间注册定时器时,当算子的 Watermark 到达或超过定时器的时间戳时,就会调用 onTimer() 方法。...值得注意的是,onTimer() 和 processElement() 调用都是同步调用,因此同时在 onTimer() 和 processElement() 方法中访问状态以及进行修改都是安全的。...这意味着当为同一个 key 或时间戳注册多个定时器时,onTimer() 方法只会调用一次。

2K30

理解ProcessFunction的Timer逻辑

核心代码如下图: 建议您先把上述官方代码看一遍,这样再看过下面几个关键点,就能熟练使用此定时器了; 定时器的几个关键点 下图红框中的registerEventTimeTimer方法只要执行了,则蓝框中的onTimer...onTime方法执行时,timestamp的值是之前registerEventTimeTimer的入参: 最后一点也是最关键的一点:每次执行processElement都会修改state,所以,每次onTimer...执行的时候,拿到的state都是最近一次processElement中写入的值,因此,假设processElement执行10次,onTimer也会执行10次,但下图红框中的判断只有最后一次等于ture...举例说明 第一次执行processElement,时间是12:01:01,因此state中记录的是12:01:01,registerEventTimeTimer入参就是12:11:01(这就是第一个onTimer...的timestamp入参) 第一个onTimer执行,timestamp是12:11:01,取得state是12:01:05,因此timestamp == result.lastModified +

36720
您找到你想要的搜索结果了吗?
是的
没有找到

Flink深入之:理解ProcessFunction的Timer逻辑

在这里插入图片描述] 建议您先把上述官方代码看一遍,这样再看过下面几个关键点,就能熟练使用此定时器了; 定时器的几个关键点 下图红框中的registerEventTimeTimer方法只要执行了,则蓝框中的onTimer...,timestamp的值是之前registerEventTimeTimer的入参: [在这里插入图片描述] 最后一点也是最关键的一点:每次执行processElement都会修改state,所以,每次onTimer...执行的时候,拿到的state都是最近一次processElement中写入的值,因此,假设processElement执行10次,onTimer也会执行10次,但下图红框中的判断只有最后一次等于ture...举例说明 第一次执行processElement,时间是12:01:01,因此state中记录的是12:01:01,registerEventTimeTimer入参就是12:11:01(这就是第一个onTimer...的timestamp入参) 第一个onTimer执行,timestamp是12:11:01,取得state是12:01:05,因此timestamp == result.lastModified + 60000

1.9K00

聊聊flink的ProcessFunction

ctx.timerService().registerEventTimeTimer(current.lastModified + 60000); } ​ @Override public void onTimer...processElement方法里头会更新该ValueState,用于记录每个key的element个数以及最后访问时间,然后注册一个EventTimeTimer,在当前eventTime时间的60秒后到达 onTimer...abstract void processElement(I value, Context ctx, Collector out) throws Exception; ​ public void onTimer...里头有三个抽象方法,分别是timestamp、timerService、output;OnTimerContext继承了Context,它定义了timeDomain方法 ProcessFunction还定义了onTimer...里头有三个抽象方法,分别是timestamp、timerService、output;OnTimerContext继承了Context,它定义了timeDomain方法;ProcessFunction还定义了onTimer

1.9K10

ProcessFunction:Flink最底层API使用案例详解

ProcessFunction有两个重要的接口processElement和onTimer,其中processElement函数在源码中的Java签名如下: // 处理数据流中的一条元素 public...另外一个接口是onTimer: // 时间到达后的回调函数 public void onTimer(long timestamp, OnTimerContext ctx, Collector out...) 这是一个回调函数,当到了“闹钟”时间,Flink会调用onTimer,并执行一些业务逻辑。...在onTimer方法中实现一些逻辑,到达t时刻,onTimer方法被自动调用。 从Context中,我们可以获取一个TimerService,这是一个访问时间戳和Timer的接口。...currentTimer状态,后续数据会读取currentTimer,做相关判断 currentTimer.update(timerTs) } } override def onTimer

1.6K43

Flink中延时调用设计与实现

如果收到的是offline状态,则注册一个ProcessingTime的定时器,并且将服务器信息与定时时间存储状态中;如果收到的是online状态并且状态中定时时间不为-1,则删除定时器并将状态时间置为-1 onTimer...deleteProcessingTimeTimer(timeState.value()) timeState.update(-1) } } override def onTimer...在一些数据量比较大并且重度依赖定时触发的任务会占用比较大的内存,可以选择Rocksdb存储定时信息 由于flink中数据的处理涉及到key的切换,并且状态与key绑定,flink为了保证定时触发操作(onTimer...)与正常处理(processElement)操作的线程安全,做了同步处理,在调用触发时必须要获取到锁,也就是二者同时只能有一个执行,因此一定要保证onTimer处理的速度,以免任务发生阻塞。

57810
领券