我正在为一家电子商务公司设计一个购物篮放弃系统。系统将根据以下规则向用户发送消息:
- 用户在网站上有 30 分钟没有互动。
- 已将值(value)超过 50 美元的产品添加到购物车。
- 尚未完成交易。
我使用 Google Cloud Dataflow 处理数据并决定是否应发送消息。我在下面有几个选项:
- 使用持续时间为 30 分钟的滑动窗口。
- 具有基于时间的触发器的全局窗口,延迟 30 分钟。
我认为滑动窗口在这里可能会起作用。但我的问题是,能否有一种解决方案基于使用具有基于处理时间的触发器的全局窗口和此用例的延迟? 据我了解基于 Apache Beam 文档的触发器 => 触发器允许 Beam 在给定窗口关闭之前发出早期结果。例如,在一定时间过去后或在一定数量的元素到达后发出。 触发器允许通过在事件时间水印通过窗口末尾后触发来处理延迟数据。
因此,对于我的用例和上述触发器概念,我认为触发器不能在为每个用户设置延迟后触发(上面提到过 - 只能在一定数量后发出上面提到的元素,但不确定是否可以是 1)。你能证实吗?
最佳答案
两个答案 1 - 滑动窗口和 2 - 全局窗口都不正确
滑动窗口是不正确的,因为 - 假设每个用户有一个 key ,即使他们仍在浏览,也会在他们第一次开始浏览后 30 分钟发送一条消息
全局 Windows 是不正确的,因为 - 它会导致每 30 分钟向所有用户发送一次消息,无论他们在当前 session 中的位置
在这种情况下,即使是固定的 Windows 也是不正确的,因为假设每个用户都有一个 key ,那么每 30 分钟就会发送一条消息
正确答案是 - 使用间隔持续时间为 30 分钟的 session 窗口 这是正确的,因为它会在用户处于非事件状态 30 分钟后向每个用户发送一条消息
关于google-cloud-dataflow - 带有触发器用例的数据流滑动窗口与全局窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473094/