gpt4 book ai didi

google-cloud-dataflow - 在 Apache Beam 中按顺序触发窗口

转载 作者:行者123 更新时间:2023-12-05 07:27:56 26 4
gpt4 key购买 nike

使用 Apache Beam,我尝试将指标从 Dataflow 发布到 StackDriver。但是,如果 t1 的值已经写入,StackDriver 不允许为 t0 写入值,不幸的是我还没有在 Apache Beam 中找到方法强制执行我希望窗口按时间顺序发出的事实(据我所知,t1 的 EARLY Pane 仍可能在 t0 的 ON_TIME 之前)。

所以我决定在 1 分钟修复窗口中不允许任何迟到,如下所示:

input
.apply("IntoOneMinFixedWindow", Window.<T>into(FixedWindows.of(Duration.standardMinutes(1)))
.withAllowedLateness(Duration.ZERO)
.discardingFiredPanes())
.apply("GloballyCount", Combine.globally(Count.<T>combineFn()).withoutDefaults())
.apply("StackDriverWriterFn", ParDo.of(new StackDriverWriterFn(metricName)));

“输入”中的数据来自 Pub/Sub,而 StackDriverWriterFn 中的代码几乎是逐字地来自:https://cloud.google.com/monitoring/custom-metrics/creating-metrics

当管道处于稳定状态时,这会按预期工作。但是,如果由于某种原因,管道停机几分钟并重新启动,水印会快速增长,同时会追赶未处理的数据,并且多个窗口或多或少同时发出,这是不可预测的顺序,这会导致以下错误:

com.google.api.gax.rpc.InvalidArgumentException: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: One or more TimeSeries could not be written: Points must be written in order. One or more of the points specified had an older end time than the most recent point.: timeSeries[0]

我想知道我是否遗漏了什么,或者我真的被迫以某种方式缓冲样本,并在写入 StackDriver 之前对它们进行排序。

最佳答案

您是正确的,在时间 t1 结束的窗口的早期输​​出可能先于在稍后时间 t2 结束的窗口的任何输出之前输出。同样值得注意的是,PCollections 没有固有的顺序,并且传输不需要保持顺序。

您也是正确的,如果您想将带有事件时间戳的数据发送到要求它按顺序排列的系统,等待直到事件时间水印确保不会有以后的数据是唯一的选择。

如果您提供更多有关您如何使用 StackDriver 的详细信息,我可能会添加更多关于如何最有效地使用它的信息。

关于google-cloud-dataflow - 在 Apache Beam 中按顺序触发窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53691263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com