Flink 在编写逻辑时会用到的与时间相关的 API,在应用逻辑里通过接口支持可以完成哪几件事?
在应用逻辑里通过接口支持可以完成3件事:
第一,获取记录的时间。Event Time 可以调 context.getTimestamp,或在SQL 算子内从数据字段中把对应的时间给提取出来。Processing Time 可以直接调currentProcessingTime 完成调取,它的内部是直接调用了获取系统时间的静态方法来返回的值。
第二,获取 Watermark。其实只有在 Event Time 里才有 Watermark 的概念,而 Processing Time 里是没有的。但在 Processing Time 中非要把某个东西当成Watermark,其实就是数据时间本身。也就是说第一次调用 timerService.currentProcessingTime 方法之后获取的值。这个值既是当前记录的这个时间,也是当前的Watermark 值,因为时间总是往前流动的,第一次调用了这个值后,第二次调用时这个值肯定不会再比第一次值还小。
第三,注册定时器。定时器的作用是清理。比如需要对一个 cache 在未来某个时间进行清理工作。既然清理工作应该发生在未来的某个时间点,那么可以调用timerServicerEventTimeTimer 或 ProcessingTimeTimer 方法注册定时器,再在整个方法里添加一个对定时器回调的处理逻辑。当对应的 Event Time 或者Processing Time 的时间超过了定时器设置时间,它就会调用方法自己编写定时器的回调逻辑。
资料来源:《Apache Flink 必知必会》,下载链接:https://developer.aliyun.com/topic/download?id=1189
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。