专栏首页SmartSiFlink 定时器的4个特性

Flink 定时器的4个特性

本文介绍了在 Flink 中使用定时器的一些基本概念和注意事项。开发人员可以使用 Flink 的 ProcessFunction 算子来注册自己的定时器,该算子可以访问流应用程序的一些基本构建块,例如:

  • 事件(流元素)
  • 状态(容错,一致性,仅在 KeyedStream 上应用)
  • 定时器(事件时间和处理时间,仅在 KeyedStream 上应用)

有关 Flink ProcessFunction 的更多信息,请参考 Flink 如何使用ProcessFunction

1. 什么是定时器

定时器可以让 Flink 流处理程序对处理时间和事件时间的变化作出反应。我们之前的一篇文章比较详细地介绍了 Flink 中不同概念的时间以及说明了处理时间、事件时间以及摄入时间之间的差异。在使用定时器处理事件流,每次调用 processElement() 时,我们可以借助 Context 对象访问元素的事件时间戳和 TimerService。然后我们使用 TimerService 为将来的事件时间/处理时间实例注册回调。这样之后,一旦到达定时器的指定时刻,就会调用 onTimer() 方法。

onTimer() 回调函数可能会在不同时间点被调用,这首先取决于使用处理时间还是事件时间来注册定时器。特别是:

  • 使用处理时间注册定时器时,当服务器的系统时间到达定时器的时间戳时,就会调用 onTimer() 方法。
  • 使用事件时间注册定时器时,当算子的 Watermark 到达或超过定时器的时间戳时,就会调用 onTimer() 方法。

与 processElement() 方法类似,onTimer() 回调函数中对状态的访问也仅局限于当前 key(即注册定时器的 那个 key)。值得注意的是,onTimer() 和 processElement() 调用都是同步调用,因此同时在 onTimer() 和 processElement() 方法中访问状态以及进行修改都是安全的。

2. 四个基本特征

下面我们讨论 Flink 中定时器的4个基本特征,在使用它们之前应该记住这些特征:

2.1 定时器只在 KeyedStream 上注册

由于定时器是按 key 注册和触发的,因此 KeyedStream 是任何操作和函数使用定时器的先决条件。

2.2 定时器进行重复数据删除

TimerService 会自动对定时器进行重复数据的删除,因此每个 key 和时间戳最多只能有一个定时器。这意味着当为同一个 key 或时间戳注册多个定时器时,onTimer() 方法只会调用一次。

2.3 对定时器Checkpoint

定时器也会进行Checkpoint,就像任何其他 Managed State 一样。从 Flink 检查点或保存点恢复作业时,在状态恢复之前就应该触发的定时器会被立即触发。

2.4 删除计时器

从 Flink 1.6 开始,就可以对定时器进行暂停以及删除。如果你使用的是比 Flink 1.5 更早的 Flink 版本,那么由于有许多定时器无法删除或停止,所以可能会遇到检查点性能不佳的问题。

你可以使用如下命令停止一个处理时间定时器:

long timestampOfTimerToStop = ... 
ctx.timerService().deleteProcessingTimeTimer(timestampOfTimerToStop);

你还可以使用如下命令停止一个事件时间定时器:

long timestampOfTimerToStop = ...
ctx.timerService().deleteEventTimeTimer(timestampOfTimerToStop);

值得一提的是,如果没有给指定时间戳注册定时器,那么停止定时器不会起任何效果。

英译对照:

  • 定时器: Timers
  • 状态: state
  • 摄入时间: Ingestion Time
  • 检查点: checkpoint
  • 保存点: savepoint

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript中的一次性定时器和周期性定时器

    上面这种方式,如果要清除定时器,是不能清除的,只能在设置定时器的时候,定义一个变量来接收定时器的返回值,这样才可以清除定时器。

    青年码农
  • Flink 最锋利的武器:Flink SQL 入门和实战

    Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准 SQL 语义的开发语言。

    王知无-import_bigdata
  • 基于 Flink 构建关联分析引擎的挑战和实践

    随着云计算、大数据等新一代IT技术在各行业的深入应用,政企机构IT规模和复杂程度不断提高,网络流量、日志等各类数据规模大幅提升。与此同时,网络攻防日益激烈,网络...

    zhisheng
  • Flink最锋利的武器:Flink SQL入门和实战 | 附完整实现代码

    Flink SQL 是 Flink 实时计算为简化计算模型,降低用户使用实时计算门槛而设计的一套符合标准 SQL 语义的开发语言。

    AI科技大本营
  • 快速入门Flink (1) —— Flink的简介与架构体系

    历时一个多月,我们终于结束了【企业级360°全方位用户画像】的项目,想看具体详情的朋友,可以移步至博主的大数据项目专栏一饱眼福…

    大数据梦想家
  • Apache Flink on Kubernetes运行模式分析

    Apache Flink是一个分布式流处理引擎,它提供了丰富且易用的API来处理有状态的流处理应用,并且在支持容错的前提下,高效、大规模的运行此类应用。通过支持...

    yujunwang
  • Flink Introduction

    Hadoop开源社区新技术层出不穷,大家可能对Map/Reduce(YARN)/Spark很熟悉,最近又新增了一个Flink,也是大有来头。 Apache Fl...

    大数据和云计算技术
  • 一文让你彻底了解大数据实时计算引擎 Flink

    在上一篇文章 你公司到底需不需要引入实时计算引擎? 中我讲解了日常中常见的实时需求,然后分析了这些需求的实现方式,接着对比了实时计算和离线计算。随着这些年大数据...

    zhisheng
  • Flink 全链路端到端延迟的测量方法

    FLink Job端到端延迟是一个重要的指标,用来衡量Flink任务的整体性能和响应延迟(大部分流式应用,要求低延迟特性)。

    zhisheng
  • Flink在新浪微博的在线机器学习和实时数据分析

    Flink Forward,给了我一个绝佳的机会,向全球 Apache Flink 社区介绍微博如何使用 Apache Flink 在我们的平台上运行实时数据处...

    后场技术
  • Flink1.8.0发布!新功能抢先看

    1.Flink1.8.0引入对状态的清理? 2.保存点兼容性方面,不在兼容哪个版本? 3.Maven依赖在Hadoop方便发生了什么变化? 4.Flink是否发...

    王知无-import_bigdata
  • 【Flink】Flink简介及Standalone、Yarn和Kubernetes模式的部署

    Flink 起源于 Stratosphere 项目,Stratosphere 是在 2010~2014 年由 3 所地处柏林的大学和欧洲的一些其他的大学共同进行...

    魏晓蕾
  • Flink1.8新版发布:都有哪些改变

    问题导读 1.Flink1.8引入对什么状态的连续清理? 2.保存点兼容性方面,不在兼容哪个版本? 3.Maven依赖在Hadoop方便发生了什么变化? 4.F...

    用户1410343
  • 为什么Flink会成为下一代大数据处理框架的标准?

    导读:本文将告诉你Flink是什么,以及为什么Flink会成为下一代大数据处理框架的标准。

    华章科技
  • Flink 原理详解

    Flink 是一个流处理框架,支持流处理和批处理,特点是流处理有限,可容错,可扩展,高吞吐,低延迟。

    黑白格
  • Flink 类型和序列化机制简介 转

    Flink 的类型系统源码位于 org.apache.flink.api.common.typeinfo 包,让我们对图 1 深入追踪,看一下类的继承关系图:

    stys35
  • Flink 自定义触发器实现带超时时间的 CountWindow

    Flink 的 window 有两个基本款,TimeWindow 和 CountWindow。 TimeWindow 是到时间就触发窗口,CountWindow...

    王知无-import_bigdata
  • 五万字 | Flink知识体系保姆级总结

    一、Flink简介 二、Flink 部署及启动 三、Flink 运行架构 四、Flink 算子大全 五、流处理中的 Time 与 Window 六、Flink ...

    五分钟学大数据
  • Flink1.7稳定版发布:新增功能为企业生产带来哪些好处

    问题导读 1.Flink1.7开始支持Scala哪个版本? 2.Flink1.7状态演变在实际生产中有什么好处? 3.支持SQL/Table API中的富集连接...

    用户1410343

扫码关注云+社区

领取腾讯云代金券