google-cloud-dataflow - 带有触发器用例的数据流滑动窗口与全局窗口?
问题描述
我正在为一家电子商务公司设计一个篮子放弃系统。系统将根据以下规则向用户发送消息:
- 30 分钟内用户在网站上没有任何交互。
- 已将价值超过 50 美元的产品添加到购物篮中。
- 尚未完成交易。
我使用 Google Cloud Dataflow 处理数据并决定是否应发送消息。我在下面有几个选择:
- 使用持续时间为 30 分钟的滑动窗口。
- 具有基于时间的触发器的全局窗口,延迟为 30 分钟。
我认为滑动窗口可能在这里工作。但我的问题是,是否有基于使用全局窗口和基于处理时间的触发器和此用例延迟的解决方案?据我了解基于 Apache Beam 文档的触发器 => 触发器允许 Beam 在给定窗口关闭之前发出早期结果。例如,在经过一定时间后或在一定数量的元素到达后发射。触发器允许通过在事件时间水印经过窗口结束后触发来处理迟到的数据。
因此,对于我的用例和上述触发器概念,我认为触发器不能在每个用户设置延迟后触发(上面提到过 - 只能在一定数量的元素之后发出上面提到过,但不确定是否可以是 1). 你确定吗?
解决方案
答案 1 - 滑动窗口和 2 - 全局窗口都不正确
滑动窗口不正确,因为 - 假设每个用户有一个键,即使他们仍在浏览,也会在他们第一次开始浏览后 30 分钟发送一条消息
全局 Windows 不正确,因为它会导致每 30 分钟向所有用户发送一次消息,无论他们在当前会话中的哪个位置
在这种情况下,即使是固定窗口也不正确,因为假设每个用户有一个密钥,则每 30 分钟将发送一条消息
正确答案是 - 使用间隔持续时间为 30 分钟的会话窗口 这是正确的,因为它会在该用户处于非活动状态 30 分钟后向每个用户发送一条消息
推荐阅读
- python - anaconda Jupyter Notebook 中的内核错误:ImportError
- java - net.snowflake.client.jdbc.SnowflakeSQLException: JDBC 驱动遇到通信错误
- python - 子图和 twinx 轴
- swift - 如何将 compositingFilter 添加到 NStextfield
- java - 无法构造可恢复密钥。你的证件有效吗?
- oracle - Oracle 版本和 Spring Boot
- javascript - 阻止创建 WebMediaPlayer 的尝试,因为已经存在太多 WebMediaPlayer
- python - 迭代数据框的两列并根据另一列的条件替换空值
- javascript - 使用 getScrollHeight 判断滚动条底部在 PC Chrome 中可以正常工作,但不能在 Chrome 的移动设备上工作
- javascript - 使用 findById 时无法在数组中传递多个文档