(关于练习: ProcessFunction
及定时器(长车程警报)的讨论)
这些情况值得注意:
- 缺少 START 事件。 然后 END 事件将被无限期地存储在状态中(这是一个漏洞!)。
- END 事件丢失。 计时器将被触发并且状态将被清除(这没关系)。
- END 事件在计时器触发并清除状态后到达。 在这种情况下,END 事件将被无限期地存储在状态中(这是另一个漏洞!)。
这些漏洞可以通过使用 状态有效期 或其他计时器,以最终清除残留的状态。
不管如何聪明地处理保持什么样的状态,以及选择保持多长时间,我们最终都应该清除它——否则状态将以无限的方式增长。 如果丢失了这些信息,我们将冒着延迟事件导致错误或重复结果的风险。
在永久地保持状态与在事件延迟时偶尔出错之间的权衡是有状态流处理中固有的挑战。
对于下列的每一项,添加测试以检查所需的行为。
- 扩展解决方案,使其永远不会泄漏状态。
- 定义事件丢失的含义,检测丢失的 START 和 END 事件,并将一些通知发送到旁路输出。