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電源使用中に発生するいくつかの一般的なアラーム

推薦する

quadcone-ロサンゼルス MC データセンター XEN VPS シンプルレビュー

Quadcone - 3.5 USD/年払い/6G スペース/独立 IPv4/ロサンゼルス/MC デ...

「エッジコンピューティングは『ワイヤレス』で可能」レノボがThinkSystemエッジサーバーをリリース

本日、「エッジコンピューティングの『ワイヤレス』の可能性」をテーマにしたLenovo ThinkSy...

コンテナ管理のための 7 つの Docker コマンド

Docker入門Docker は、コンテナ内でアプリケーションを構築、デプロイ、実行するためのオープ...

テンセントホールディングスのWeChatは商業銀行の先駆者になるかもしれない

テンセントのWeChatは金融分野への参入の甘さを味わい、さらなる準備を始めた。最近、テンセント・ホ...

JVMクラスローダーを整理しました

以前面接に行ったとき、面接官から JVM のパフォーマンス チューニングについて質問されました。以前...

新浪微博も、これらの4つの方法でWeChatに対して必死の反撃を仕掛けることができる。

【新浪微博がついにナスダックに上場したが、業界の声も極端に二極化している。評価額が予想の半分で、ユー...

Xiaomi、LeTVなどの企業はなぜ新製品をまずTencent QQ Spaceで発売することを好むのでしょうか?

原題: Xiaomi、LeTV などが新製品を最初に Tencent QQ Space で発売するこ...

ローコード + サーバーレスは、次世代デジタル企業の開発に新たなパラダイムを切り開きます

近年、ローコードは徐々に重要な方向になってきています。投資機関の注目を集めているだけでなく、多くの企...

2018年の中国のオンラインオーディオコンテンツ消費市場の分析

現在、国内のオンラインオーディオコンテンツ消費市場は急速な発展段階にあります。 Analysys I...

rfchost シンガポール Three Network Direct KVM 仮想 VPS の簡単なレビュー

rfchost はシンガポール データ センターをひっそりと立ち上げました (現在、データ センター...

デジタル化の今後の方向性とは?アプリケーションの革新が新世代のエンタープライズクラウドの出現を推進

[51CTO.com からのオリジナル記事] 1980 年代のグリッド コンピューティング、1990...

機密情報ウェブサイトを宣伝する際に注意すべき点がいくつかあります。

武漢の SEO も他の SEO と同じです。毎日、いくつかの分類情報プラットフォームに戻って、会社の...

個人用PCからAzureまで、Microsoftは包括的な3次元セキュリティ保護を実現します

現在、世界的なデジタル変革が加速しており、企業の IT は変化の過程にあります。企業にとってのデジタ...

PaaS+ローコード: クラウド コンピューティングの第 3 の波

人間社会は3つの段階に分けられます。最初の波は、約1万年前に始まった農業段階です。第二段階は17世紀...