关于存储在数据流中的中间状态的问题
Questions around intermediate state stored in dataflow
我是数据流编程模型的新手,我对数据流在 windowed 流处理中存储中间状态的方式有一些疑问。假设我每天 windowing 然后执行聚合。当一个新事件出现时,它需要访问该 window 和组中的所有数据。
这些数据是存储在内存中、磁盘上、GCS 中还是完全不同的地方?
中间数据量对数据量有影响吗
工作所需的机器?
关闭window后数据会发生什么变化?
如果我正在执行诸如求和之类的操作,它不需要所有数据都存储在中间状态,有没有办法告诉数据流只存储最后一个的结果更新?
在 Dataflow 的当前实现中,它存储在永久性磁盘上(以防止机器故障)并随机缓存在内存中。
机器数量影响缓存性能和可用磁盘IOps数量,进而影响每台机器的吞吐量。中间数据也可能需要在机器之间洗牌,增加 CPU 需求
window可能会发生两种情况;它在触发器触发时触发,并在水印超过 window 的末尾加上允许的延迟时关闭(并被垃圾收集)。
当 window 触发时,行为取决于正在使用的 window accumulation mode。对于 .accumulatingFiredPanes
,数据会一直保留到 .withAllowedLateness
中的值被传递为止。对于.discardingFiredPanes
,每次触发后数据被丢弃。
当 window 关闭时,所有剩余数据(增量值或总值)将发送到下一个转换,并清除 window 的所有数据。如果您使用默认触发器和 0 允许迟到(也是默认值),两者都会立即发生。
是的!如果使用关联运算(称为Combiner),则中间结果将以紧凑格式存储。
我是数据流编程模型的新手,我对数据流在 windowed 流处理中存储中间状态的方式有一些疑问。假设我每天 windowing 然后执行聚合。当一个新事件出现时,它需要访问该 window 和组中的所有数据。
这些数据是存储在内存中、磁盘上、GCS 中还是完全不同的地方?
中间数据量对数据量有影响吗 工作所需的机器?
关闭window后数据会发生什么变化?
如果我正在执行诸如求和之类的操作,它不需要所有数据都存储在中间状态,有没有办法告诉数据流只存储最后一个的结果更新?
在 Dataflow 的当前实现中,它存储在永久性磁盘上(以防止机器故障)并随机缓存在内存中。
机器数量影响缓存性能和可用磁盘IOps数量,进而影响每台机器的吞吐量。中间数据也可能需要在机器之间洗牌,增加 CPU 需求
window可能会发生两种情况;它在触发器触发时触发,并在水印超过 window 的末尾加上允许的延迟时关闭(并被垃圾收集)。
当 window 触发时,行为取决于正在使用的 window accumulation mode。对于
.accumulatingFiredPanes
,数据会一直保留到.withAllowedLateness
中的值被传递为止。对于.discardingFiredPanes
,每次触发后数据被丢弃。当 window 关闭时,所有剩余数据(增量值或总值)将发送到下一个转换,并清除 window 的所有数据。如果您使用默认触发器和 0 允许迟到(也是默认值),两者都会立即发生。
是的!如果使用关联运算(称为Combiner),则中间结果将以紧凑格式存储。