This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
プラグイン #
プラグインは、制限されたクラスローダを通じてコードを厳密に分離することを容易にします。プラグインは、ほかのプラグインまたは特にホワイトリストに登録されていないFlinkのクラスにアクセスできません。この厳密な分離により、クラスを再配置したり、共通のバージョンに収束したりすることなく、プラグインに同じライブラリの競合するバージョンを含めることができます。現在、ファイルシステムとメトリックレポーターはプラグ可能ですが、将来的には、コネクタ、フォーマット、さらにはユーザコードもプラグ可能になる予定です。
分離とプラグイン構造 #
プラグインは独自のフォルダにあり、複数のjarで構成される場合があります。プラグインのフォルダの名前は任意です。
flink-dist
├── conf
├── lib
...
└── plugins
├── s3
│ ├── aws-credential-provider.jar
│ └── flink-s3-fs-hadoop.jar
└── azure
└── flink-azure-fs-hadoop.jar
各プラグインは独自のクラスローダを通じてロードされ、他のプラグインから完全に分離されます。
従って、flink-s3-fs-hadoop
とflink-azure-fs-hadoop
は、競合する異なるライブラリバージョンに依存することができます。ファットjars(シェーディング)の作成中に、クラスを再配置する必要はありません。
プラグインは、Flinkのlib/
フォルダから特定のホワイトリストに登録されたパッケージにアクセスする場合があります。特に、必要な全てのサービスプロバイダインタフェース(SPI)はシステムクラスローダを通じてロードされるため、たとえユーザが誤ってfat jarにまとめてしまった場合でも、org.apache.flink.core.fs.FileSystem
の2つのバージョンが常に存在することはありません。個のシングルトンクラスの要件は、Flinkランタイムがプラグインへのエントリポイントを持つために厳密に必要です。サービスクラスはjava.util.ServiceLoader
を通じて検出されるため、シェーディング中は必ずサービス定義をMETA-INF/services
に保持してください。
注意 現在、SPIシステムを具体化する中で、プラグインからさらに多くのFlinkコアクラスにアクセスできます
さらに、最も一般的なロガーフレームワークはホワイトリストに登録されているため、Flinkコア、プラグイン、ユーザコード全体で均一にロギングが可能です。
ファイルシステム #
全てのファイルシステムがプラグイン可能です。つまり、プラグインとして使えるし、そうすべきです。be used as plugins. プラガブルファイルシステムを使うには、Flinkを起動する前に、対応するJARファイルをopt
ディレクトリからFlink配布物のplugins
ディレクトリの下のディレクトリにコピーします。例えば、
mkdir ./plugins/s3-fs-hadoop
cp ./opt/flink-s3-fs-hadoop-1.19-SNAPSHOT.jar ./plugins/s3-fs-hadoop/
s3ファイルシステム(flink-s3-fs-presto
とflink-s3-fs-hadoop
)は、既に再配置が削除されているため、プラグインとしてのみ使えます。これらを libs/ に置くと、システム障害が発生します。
厳密な分離により、ファイルシステムは lib/ 内の認証情報プロバイダにアクセスできなくなります。必要なプロバイダをそれぞれのプラグインフォルダに追加してください。
メトリックレポーター #
Flinkが提供する全てのメトリックレポータは、プラグインとして使えます。 詳細は、メトリクスドキュメントを参照してください。