Dataflow流管道中的日志跟踪

时间:2019-05-22 10:05:28

标签: google-cloud-dataflow apache-beam dataflow

我有一个具有多个管道的数据流设置,可从pub子主题中获取数据。由于这些管道呈扇形散开并与转换器和DoFunctions链合并,因此有必要跟踪通过管道吸收的每个pubsub消息。

什么是正确的方法? 一些想法:

  1. 侧面输入
  2. ParDo函数的每个输入都具有一个带有跟踪ID等的上下文对象(有点不直观)

谢谢!

1 个答案:

答案 0 :(得分:0)

我相信您的第二种方法最有意义。

在流程元素功能中,您可以捕获任何异常并记录所有失败:

import org.sfl4j.Logger;
import org.slf4j.LoggerFactory;
import ...

public class MyDoFn<ObjectWithPubsubIdA, ObjectWithPubsubIdB> {
  private static final Logger LOG = LoggerFactory.getLogger(MyDoFn.class);

  @ProcessElement
  public void processElement(ProcessContext c) {
    ObjectWithPubsubIdA a = c.element();
    try {
      ObjectWithPubsubIdB b = // transform ObjectWithPubsubIdA ...
      c.output(b);
    } catch (Exception e) {
      LOG.error("MyDoFn failed for message with id {} with exception {}", a.getId(), e);
    }
  }
}

您可以使用抽象基类或其他特定于语言的构造来重用代码,以便可以在所有转换中共享一个实现。