Flink分散プログラムにおける例外処理

Flink分散プログラムにおける例外処理

[[409230]]

この記事はWeChatの公開アカウント「易言」から転載したもので、著者は易言です。この記事の転載についてはYiyan公式アカウントまでご連絡ください。

当社のデータ プラットフォーム製品では、開発を簡素化するために、Flink をカプセル化し、ジョブとフローの抽象化を定義しています。ジョブは実際には Flink 操作です。各ジョブは複数のフローを定義できます。 Flow は、Flink の DataStream として理解できます。ジョブによって渡される StreamExecutionEnvironment を使用すると、ソースやシンクを含む複数のオペレーターをフローに追加できます。

ジョブとフローの関係はカスタム @JobFlow アノテーションを使用して構成できるため、抽象 AbstractJob の run() メソッドを実行するときに、リフレクションを使用してジョブの下にあるすべてのフローを取得し、各フローの run() メソッドをトラバースして実行できます。 Flow の run() メソッドでは、実際には StreamExecutionEnvironment に従って複数の演算子が実行されます。

コンピューティングの安定性を確保するために、Flink はさまざまな再起動戦略を提供します。たとえば、再起動戦略を失敗率に設定すると、実行されたタスクのエラー数が設定された失敗率に達すると、Flink Worker ノードの TaskManager が再起動されます。再起動回数を超えると、タスク マネージャーは実行を停止します。

失敗の原因は、リソース不足、ネットワーク通信障害、Flink クラスター環境に起因するその他の障害など、さまざまなものが考えられます。ただし、作成したジョブが不適切なデータ処理のためにストリーミング データを処理するときにビジネス例外をスローし、Flink がそれを失敗と見なした可能性もあります。

ビジネス上の理由でスローされた例外によるタスク マネージャーの不要な再起動を減らすには、作成する Flink プログラムの例外処理メカニズムを指定する必要があります。 Flink のジョブはカプセル化されているため、最初からビジネス例外の問題を一度に解決することを検討しました。つまり、AbstractJob の run() メソッドでカスタム ビジネス例外をキャプチャし、エラー情報がログに記録された後に例外を「処理」して、実行の失敗につながる例外のスローを回避し、TaskManager の再起動を引き起こします。例:

  1. パブリック抽象クラスAbstractFlowはFlowを実装します{
  2. パブリックボイド実行(){
  3. 試す {
  4. 実行Bare();
  5. } キャッチ (DomainException ex) {
  6. //...
  7. }
  8. }
  9.    
  10. 保護された抽象 void runBare();
  11. }

しかし、この処理メカニズムではビジネス例外をまったく捕捉できません。なぜ?これは、Flink の分散メカニズムから始まります。

Flink クラスターでタスクを実行するには、クライアントが Flink クラスターのマスター ノードにジョブを送信する必要があります。マスターのディスパッチャはジョブを受信して​​ JobManager を起動します。JobManager はジョブの論理ビューを分析してジョブのリソース要件を理解し、このジョブに必要なリソースを ResourceManager (スタンドアロン モード。YARN の場合は、リソースは YARN によって管理およびスケジュールされます) に適用します。 JobManager はジョブの論理ビューを物理ビューに変換し、コンピューティング タスクを Flink クラスターの TaskManager に配布します。実行プロセス全体を次の図に示します。

物理的な観点から見ると、カプセル化するフローは実際にはジョブ、つまり前述のコンピューティング タスクです。ジョブには複数のオペレーターを含めることができます。隣接する演算子間でデータのシャッフルがなく、並列度が同じである場合、それらは演算子チェーンにマージされます。各オペレーターまたはオペレーター チェーンは JobVertex を形成し、実行中にタスクとして機能します。並列処理の設定に応じて、各タスクには同じ並列数のサブタスクが含まれます。これらのサブタスクは、ジョブ スケジューリングの最小の論理単位であり、プロセス リソース内のスレッドに対応し、Flink 内のスロットになります (スロット共有が考慮されていない場合)。

Flink 環境の並列度が 1 に設定され、ジョブの最初の 2 つのオペレーターがマージ オペレーター チェーンの要件を満たし、並列度が 2 に設定されていると仮定します。次に、データは keyBy() などの演算子を通じてシャッフルされ、同じ Sink にマージされます。それらの関係は以下の図に示されます。

当然ですが、Flink クラスターはジョブを実行する際にジョブを分割し、分割されたサブタスクを TaskManager 内の各スロットに分配します。 TaskManager は JVM であり、Slot はプロセス内のスレッドです。

答えは自明です。 AbstractFlow がタスク実行時に各オペレーターによってスローされたビジネス例外をキャプチャできない理由は、それらが同じ JVM または同じスレッドで実行されていないためです。これが分散開発とローカル開発の本質的な違いです。 Flink の実行原理を理解していないと、Java の例外処理メカニズムがなぜ機能しないのか混乱してしまうかもしれません。分散開発を行う際に、ローカル開発の経験をそのままコピーしていると、真実を知るまでに本当に頭をぶつけて血を流さなければならないかもしれません。したがって、正しいアプローチは、各演算子の実装で各例外をキャプチャすること、つまり、各演算子自体が堅牢であることを確認して、ジョブが可能な限り堅牢であることを保証することです。

もちろん、分散開発とローカル開発の本質的な違いはこれに限りません。たとえば、分散開発におけるプロセス間呼び出しのシリアル化の要件、データの一貫性に関するさまざまな要件、非同期通信メカニズムとブロッキング呼び出しの理解は、プログラマーにさまざまな経験をもたらす可能性があります。結局のところ、分散開発や分散システムの基本原理を理解することで、できるだけ早く真実を把握し、知らないうちに落とし穴に陥ることを避けることができます。

<<:  Golang 分散マーケットプッシュのパフォーマンスボトルネックを最適化する

>>:  UPS電源使用中に発生するいくつかの一般的なアラーム

推薦する

新しいウェブサイトを検索エンジンに認識させ、インデックスさせる方法

多くの初心者ウェブマスターにとって、ウェブサイトをうまく最適化する方法や、ウェブサイトの主要キーワー...

ウェブマスターがウェブサイトの責任者である場合に、ウェブサイトをどのようにマーケティングするかについての簡単な説明

インターネットが変化し続けるにつれて、ウェブサイトで SEO を適切に行うことがますます困難になって...

この記事はKubernetesにおける証明書の動作メカニズムを徹底的に理解するのに役立ちます

この記事はWeChatの公開アカウント「趙華兵」から転載したものです。この記事を転載する場合は、趙華...

ニュース: UK2 グループのすべてのホスティング/VPS/サーバー ブランドが最大 74% オフで販売中

イギリスのUK2グループのブランドは、20年近くの歴史があり、非常によく知られているはずです。そのブ...

エッジコンピューティングと5Gがパンデミック後の経済回復を推進

[[429757]]エッジコンピューティングと5GはCOVID-19後の経済成長を牽引するでしょうか...

limitlesshost-ロシア VPS/$7/1g メモリ/25g ハードディスク/1T トラフィック

limitlesshost.net は 2009 年に設立されたホスティング会社です。Web サイト...

SaaSベースのAIトレーニングがゲームチェンジャーとなる理由

機械学習アプリケーションが増加するにつれて、多くの人が機械学習トレーニング データを使用する利点を理...

無料URL短縮サービスBitlyが1500万ドルを調達

URL短縮サービスプロバイダーのBitlyは今年5月に2000万ドルの資金調達を計画していたが、まだ...

企業ウェブサイトのSEO最適化戦略

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています現在、広東...

仮想マシンオブジェクト作成の秘密を1つの記事でマスターする

流砂の上にプラットフォームを構築しないでください。遅かれ早かれ、あなたがしたことの代償を払うことにな...

マーケティングは創造性とプロセスの両方である

マーケティングとマネジメントが芸術なのか技術なのかについては、これまで多くの人々が深い議論を重ねてき...

SEO 求人検索の経験を 4 つステップごとに共有

私は 2011 年に卒業し、学校を卒業するとすぐに SEO 実践者の仲間入りをしました。しかし、SE...

Weiboマーケティングスキル:ファンを惹きつけ、交流する方法

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス鄧超は「走れ!男」の演技...

企業サイトターゲットに向けた多様なトラフィック誘導手法の共有

企業のウェブサイト構築は、もはやホットな話題ではありません。ますます多くの企業がインターネット運用の...

コンテンツマーケティングの実践的な方法 - 実践を導くために使用できる方法

コンテンツマーケティングは最近注目のコンセプトです。コンテンツマーケティングの重要性は、次の2つの点...