KeyedProcessFunction简单使用案例

本文介绍了电商场景中的延时处理需求,如订单待支付超时和用户未评价自动设为5星。在流处理中,Flink通过KeyedProcessFunction实现延时处理,支持处理时间和事件时间定时器。文章通过一个服务器下线监控报警的案例,详细阐述了如何使用KeyedProcessFunction,包括状态管理、定时器注册和删除,以及在ProcessingTime语义下的告警逻辑。
摘要由CSDN通过智能技术生成

在电商商品购买过程中有这样一些场景:用户点击下单,此时订单处于待支付状态,如果在2小时之后还处于待支付状态那么就将这笔订单取消,置为取消状态;用户收货之后可以对商品进行评价,如果在24小时内仍然没有评价,那么自动将用户对商品的评分设置为5星….等等,这样的场景都可以称之为延时处理场景,当数据发送出去了,不立刻进行处理,而是等待一段时间之后在处理,目前对于延时处理的方案也有很多,例如:

  1. java中DelayQueue
    内部使用优先级队列方式存储消息体,存放的消息体实现Dealy接口,然后使用一个线程不断消费队列数据。

  2. redis中SortedSet
    借助Redis的SortedSet数据结构,使用时间作为排序的方式,外部使用一个线程不断轮询该SortedSet。

  3. 定时扫描数据库
    将延时触发的任务信息存储在数据库中,然后使用线程去轮序查询符合要求触发的定时任务。
    ……

在流处理中也经常会有一些定时触发的场景,例如定时监控报警等,并且时间窗口的触发也是通过延时调用触发,接下来了解flink中是如何实现延时处理。

二、Flink中延时调用

在flink实时处理中,涉及到延时处理可使用KeyedProcessFunction来完成,KeyedProcessFunction是flink提供面向用户的low level api,可以访问状态、当前的watermark或者当前的processingtime, 更重要的是提供了注册定时器的功能,分为:

  1. 注册处理时间定时器,直到系统的processingTime超过了注册的时间就会触发定时任务

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值