第3章 Apache Flinkのアーキテクチャ Apache Flinkのアーキテクチャ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
第2章では、 、並列化、時間、ステートといった分散ストリーム処理の重要な概念について説明した。本章では、Flinkのアーキテクチャを高レベルで紹介し、Flinkが先に説明したストリーム処理の側面にどのように対処するかを説明する。特に、Flinkの分散アーキテクチャを説明し、ストリーミングアプリケーションで時間と状態をどのように扱うかを示し、そのフォールトトレランスメカニズムについて議論する。この章では、Apache Flinkを使って高度なストリーミング・アプリケーションをうまく実装し、運用するための関連する背景情報を提供する。Flinkの内部を理解し、ストリーミングアプリケーションのパフォーマンスや振る舞いを推論するのに役立つだろう。
システムアーキテクチャ
Flink は、ステートフルな並列データストリーム処理のための分散システムである。Flinkのセットアップは、通常複数のマシンに分散して実行される複数のプロセスで構成される。分散システムが取り組むべき共通の課題として、クラスタ内のコンピューティングリソースの割り当てと管理、プロセスの座標調整、耐久性が高く可用性の高いデータストレージ、障害回復などがある。
Flinkはこのような機能をすべて実装しているわけではない。その代わりに、コア機能である分散データストリーム処理にフォーカスし、既存のクラスタインフラやサービスを活用している。Flinkは、Apache Mesos、YARN、Kubernetesクラスタなどのクラスタ・リソース・マネージャとうまく統合されているが、スタンドアロン・クラスタとして動作するように設定することもできる。Flinkは耐久性のある分散ストレージを提供しない。代わりに、HDFSのような分散ファイルシステムやS3のようなオブジェクト・ストアを活用する。高可用性セットアップにおけるリーダー選出のために、FlinkはApache ZooKeeperに依存している。
このセクションでは、Flinkセットアップの様々なコンポーネントと、それらがアプリケーションを実行するためにどのように相互作用するかを説明する。Flinkアプリケーションをデプロイする2つの異なるスタイルと、それぞれがタスクを分散して実行する方法について説明する。最後に、Flinkの高可用モードがどのように機能するかを説明する。
Flinkセットアップの構成要素
Flinkのセットアップは、ストリーミング・アプリケーションを実行するために連携する4つの異なるコンポーネントで構成される。これらのコンポーネントは、JobManager、ResourceManager、TaskManager、Dispatcherである。FlinkはJavaとScalaで実装されているため、すべてのコンポーネントは Java仮想マシン(JVM)上で動作する。各コンポーネントは以下のようなレスポンスを持っている:
-
JobManagerは、単一アプリケーションの実行を制御するマスタープロセスである。JobManagerは実行のためにアプリケーションを受け取る。アプリケーションは、いわゆるJobGraphと呼ばれる論理データフロー・グラフ(「データフロー・プログラミング入門」を参照)から構成され、 、必要なクラス、ライブラリ、その他のリソースをすべてバンドルしたJARファイルを受け取る。JobManagerはJobGraphをExecutionGraphと呼ばれる物理的なデータフロー・グラフに変換する。ExecutionGraphは並列実行可能なタスクで構成される。JobManagerはResourceManagerにタスク実行に必要なリソース(TaskManagerスロット)を要求する。十分な数のTaskManagerスロットを受け取ると、ExecutionGraphのタスクを実行するTaskManagerに分配する。実行中、JobManagerはチェックポイントの調整( ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access