我们正在构建一个流式管道,其中数据可能会在几个步骤中遇到不同的错误,例如序列化错误、验证错误和写入存储时的运行时错误。每当发生错误时,我们将数据定向到侧面输出。这些侧输出的错误处理逻辑是相同的。我们将数据写入通用错误存储以进行后期处理/报告。
构建管道至少有三个选项。(下面的伪代码)
使用转换的新实例处理每个侧输出。
sideOutput1.apply(new HandleErrorTransform()); sideOutput2.apply(new HandleErrorTransform());
使用转换的单个实例处理每个侧输出。
Transform errorTransform = new HandleErrorTransform(); sideOutput1.apply(errorTransform); sideOutput2.apply(errorTransofrm);
将这些侧输出的输出展平,并使用单个转换来处理所有错误。
PCollectionList.of(sideOutput1).and(sideOutput2) .apply(Flatten.<ErrorMessage>pCollections()) .apply(new HandleErrorTransform());
对于使用哪一个以获得更好的可扩展性和性能,是否有任何建议?或者也许没关系?