0

シリアル化エラー、検証エラー、ストレージへの書き込み時の実行時エラーなど、いくつかのステップでデータにさまざまなエラーが発生する可能性があるストリーミング パイプラインを構築しています。エラーが発生するたびに、データを副出力に送信します。エラー処理ロジックは、これらのサイド出力で同じです。後処理/レポート用に共通のエラー ストレージにデータを書き込みます。

パイプラインを構築するには、少なくとも 3 つのオプションがあります。(以下の疑似コード)

  1. 変換の新しいインスタンスで各副出力を処理します。

    sideOutput1.apply(new HandleErrorTransform());
    sideOutput2.apply(new HandleErrorTransform());
    
  2. 変換の 1 つのインスタンスで各副出力を処理します。

    Transform errorTransform = new HandleErrorTransform();
    sideOutput1.apply(errorTransform);
    sideOutput2.apply(errorTransofrm);
    
  3. これらの副出力からの出力を平坦化し、単一の変換を使用してすべてのエラーを処理します。

    PCollectionList.of(sideOutput1).and(sideOutput2)
      .apply(Flatten.<ErrorMessage>pCollections())
      .apply(new HandleErrorTransform());
    

スケーラビリティとパフォーマンスを向上させるために、どちらを使用するかについてのアドバイスはありますか? それとも関係ないのでしょうか?

4

1 に答える 1