【发布时间】:2021-10-29 11:51:04
【问题描述】:
根据 Apache 梁文档: https://beam.apache.org/documentation/programming-guide/#state-and-timers
All state for a key is scoped to the current window. This means that the first time a key is seen for a given window any state reads will return empty, and that a runner can garbage collect state when a window is completed.
我有一个用例,当前窗口的输出需要被下一个窗口访问。
窗口是固定的 5 秒窗口,并执行计算以输出此窗口内覆盖的总距离。我需要将此距离添加到下一个窗口总数中。目前我通过将总数写入数据库并在下一个窗口中读取来实现这一点,但这会大大减慢处理速度。
所以我的问题是,状态是否可以在窗口之间传输。 或者我是否必须在总体全局窗口内设置一个 5 秒窗口的全局窗口? 这可能吗?
【问题讨论】:
-
在我写出完整答案之前,您在下一个窗口中说需要距离是什么意思?就像每个窗口的距离只包括它自己的距离和前一个窗口的距离? (即Sliding Windows)或者每个窗口的距离是该点的全部总和?第二个听起来你可以改回全局窗口,然后使用组合来添加所有距离(可能使用触发器来触发早期结果)。
-
数据是车辆里程表读数的流,因此我们使用一个短窗口找到最小值和最大值来获取差异,然后对每辆车的这些差异求和。这个总和“窗口距离”被添加到从前一个窗口出来的总数中,以获得当前发送的总距离。
-
似乎@DanielOliveira 提出的组合对你来说是更好的选择。另一个想法,如果您正在接收里程表数据,为什么不从第一个窗口的较小值中减去最后收到的较大值?它总是会给你总距离,你不必总是写最后收到的距离(如果一些窗口丢失,它也可以防止你在总距离中出错)。
-
我不确定我是否理解,我遇到的问题是我无法在窗口之间共享信息。
标签: apache-beam