apache-flink - Apache Flink 如何处理注册的定时器状态?它是否存储/恢复它们?对于“事件时间”和“处理时间”特性?
问题描述
Apache Flink 有一个时间服务,让开发人员注册基于时间的事件,并在这些事件上得到通知(基于处理时间或事件时间)!但我不明白当 Apache Flink 采取检查点并从这些快照中恢复它的状态时它是如何工作的!
- 它是否存储并恢复其计时器状态?
- 我可以猜到它在活动时间是如何工作的!(通过存储水印)但是处理时间呢?
- 如果它不存储计时器,那么故障恢复将不会成功,直到我们将丢失所有基于时间的事件/状态,这意味着时间窗口将无法正常运行!我对吗?
解决方案
Flink 的所有定时器都保存为托管的 Flink 状态,并在故障恢复过程中恢复。所有应该在中断期间触发的处理时间计时器将在恢复后立即触发,并且事件时间计时器将在水印到达时自然触发。
唯一没有完美处理的是运营商没有检查他们当前的水印。如果源相当活跃,这通常不会引起注意,但如果你有一个几乎空闲的源,那么这可能会导致事件时间计时器的延迟触发。
推荐阅读
- windows - 使用 Windows cmd 删除搜索后列出的所有 SYMLINK 文件类型?
- ios - Swift:单击每个停止按钮后要求用户输入文本文件名
- macos - 如何从终端将文本更改为 Mac 目录上的不同文本
- mysql - 使用 mysql JOIN 选择数据
- ios - 当用户打开通知时,如何在 SwiftUI 中打开特定视图?
- hook - 附加在 POST 调用中返回的文件
- javascript - 为什么这个 JavaScript ES6 示例中“等待”之后的代码没有运行?
- php - 在 Laravel 存储方法中的 foreach 中保存请求变量
- ssl - vertx HTTPS 服务器在升级到 3.8.4 后停止工作
- java - 意图不断返回 null