シリアル化エラー、検証エラー、ストレージへの書き込み時の実行時エラーなど、いくつかのステップでデータにさまざまなエラーが発生する可能性があるストリーミング パイプラインを構築しています。エラーが発生するたびに、データを副出力に送信します。エラー処理ロジックは、これらのサイド出力で同じです。後処理/レポート用に共通のエラー ストレージにデータを書き込みます。
パイプラインを構築するには、少なくとも 3 つのオプションがあります。(以下の疑似コード)
変換の新しいインスタンスで各副出力を処理します。
sideOutput1.apply(new HandleErrorTransform()); sideOutput2.apply(new HandleErrorTransform());
変換の 1 つのインスタンスで各副出力を処理します。
Transform errorTransform = new HandleErrorTransform(); sideOutput1.apply(errorTransform); sideOutput2.apply(errorTransofrm);
これらの副出力からの出力を平坦化し、単一の変換を使用してすべてのエラーを処理します。
PCollectionList.of(sideOutput1).and(sideOutput2) .apply(Flatten.<ErrorMessage>pCollections()) .apply(new HandleErrorTransform());
スケーラビリティとパフォーマンスを向上させるために、どちらを使用するかについてのアドバイスはありますか? それとも関係ないのでしょうか?