首页 > 解决方案 > 带有触发器用例的数据流滑动窗口与全局窗口?

问题描述

我正在为一家电子商务公司设计一个篮子放弃系统。系统将根据以下规则向用户发送消息:

我使用 Google Cloud Dataflow 处理数据并决定是否应发送消息。我在下面有几个选择:

  1. 使用持续时间为 30 分钟的滑动窗口。
  2. 具有基于时间的触发器的全局窗口,延迟为 30 分钟。

我认为滑动窗口可能在这里工作。但我的问题是,是否有基于使用全局窗口和基于处理时间的触发器和此用例延迟的解决方案?据我了解基于 Apache Beam 文档的触发器 => 触发器允许 Beam 在给定窗口关闭之前发出早期结果。例如,在经过一定时间后或在一定数量的元素到达后​​发射。触发器允许通过在事件时间水印经过窗口结束后触发来处理迟到的数据。

因此,对于我的用例和上述触发器概念,我认为触发器不能在每个用户设置延迟后触发(上面提到过 - 只能在一定数量的元素之后发出上面提到过,但不确定是否可以是 1). 你确定吗?

标签: google-cloud-dataflowapache-beamdataflow

解决方案


答案 1 - 滑动窗口和 2 - 全局窗口都不正确

滑动窗口不正确,因为 - 假设每个用户有一个键,即使他们仍在浏览,也会在他们第一次开始浏览后 30 分钟发送一条消息

全局 Windows 不正确,因为它会导致每 30 分钟向所有用户发送一次消息,无论他们在当前会话中的哪个位置

在这种情况下,即使是固定窗口也不正确,因为假设每个用户有一个密钥,则每 30 分钟将发送一条消息

正确答案是 - 使用间隔持续时间为 30 分钟的会话窗口 这是正确的,因为它会在该用户处于非活动状态 30 分钟后向每个用户发送一条消息


推荐阅读