后期数据处理|阿帕奇光束

时间:2020-01-22 04:37:15

标签: apache-beam

错过的窗口和.withAllowedLateness期间的最新数据从here记录的管道中删除

我对此行为有一些疑问:

  1. 如何处理从管道中删除的最新数据?我们可以添加默认行为吗?说所有迟来的数据都应该记录在“全包存储”之类的地方吗?
  2. 我们是否可以使用Metric(Google Dataflow Metrics / Beam)来说明由于延迟大而导致管道中丢失了多少此类消息?

1 个答案:

答案 0 :(得分:2)

  1. 通常,我们将延迟数据定义为元素,直到它们到达时,我们只希望删除它们,并且不希望进一步处理。据我所知,添加额外的功能来处理这些消息将需要大量的精力来修改Java SDK。但是,如果您只想记录它们,则可以通过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"}。明智地选择密钥可以帮助暴露信息以识别被丢弃的消息(即数据沿袭)。

  1. 从前面的代码段可以看出,droppedDueToLateness是一个计数器指标,每次我们删除元素droppedDueToLateness.inc();时,计数器指标就会增加。您可以使用具有资源类型dataflow_job和度量标准custom.googleapis.com/dataflow/droppedDueToLateness的Stackdriver对其进行监视。

enter image description here

相关问题