错过的窗口和.withAllowedLateness
期间的最新数据从here记录的管道中删除
我对此行为有一些疑问:
答案 0 :(得分:2)
LateDataDroppingDoFnRunner
代码完成,该代码是responsible,用于从过期的窗口中删除数据:for (WindowedValue<InputT> input : concatElements) {
BoundedWindow window = Iterables.getOnlyElement(input.getWindows());
if (canDropDueToExpiredWindow(window)) {
// The element is too late for this window.
droppedDueToLateness.inc();
WindowTracing.debug(
"{}: Dropping element at {} for key:{}; window:{} "
+ "since too far behind inputWatermark:{}; outputWatermark:{}",
LateDataFilter.class.getSimpleName(),
input.getTimestamp(),
key,
window,
timerInternals.currentInputWatermarkTime(),
timerInternals.currentOutputWatermarkTime());
}
}
请注意,该日志具有DEBUG
级,因此您可能看不到它。如here所述,要覆盖数据流中的级别,可以使用--defaultWorkerLogLevel=DEBUG
,或者甚至更好地指定特定的类,例如--workerLogLevelOverrides={"org.apache.beam.sdk.util.WindowTracing":"DEBUG"}
。明智地选择密钥可以帮助暴露信息以识别被丢弃的消息(即数据沿袭)。
droppedDueToLateness
是一个计数器指标,每次我们删除元素droppedDueToLateness.inc();
时,计数器指标就会增加。您可以使用具有资源类型dataflow_job
和度量标准custom.googleapis.com/dataflow/droppedDueToLateness
的Stackdriver对其进行监视。