This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
プロジェクトの設定 #
このセクションのガイドでは、一般的なビルドツール(Maven、Gradle)を使ってプロジェクトを設定し、必要な依存関係(つまり、コネクタとフォーマット、テスト)を追加し、いくつかの高度な設定オプションについて説明します。
全てのFlinkアプリケーションはFlinkライブラリのセットに依存します。少なくとも、アプリケーションはFlink APIに依存し、さらに特定のコネクタライブラリ(つまり、Kafka、Cassandra)や、データを処理する独自の関数を開発するためにユーザが必要とするサードパーティの依存関係にも依存します
開始 #
Flinkアプリケーションの作業を開始するには、次のコマンド、スクリプト、テンプレートを使ってFlinkプロジェクトを作成します。
以下のMaveコマンドを使ってArchetypeに基づいてプロジェクトを作成するか、提供されているクイックスタートbashスクリプトを使えます。
全てのFlink Scala APIは非推奨となり、将来のFlinkバージョンでは削除される予定です。引き続きScalaでアプリケーションをビルドできますが、DataStream APIやTable APIのJavaバージョンへ移行する必要があります。
Maven command #
$ mvn archetype:generate \
-DarchetypeGroupId=org.apache.flink \
-DarchetypeArtifactId=flink-quickstart-java \
-DarchetypeVersion=1.19-SNAPSHOT
これにより、新しく作成したプロジェクトに名前を付けることができ、groupId、artifactId、パッケージ名を対話的に尋ねられます。
クイックスタートスクリプト #
$ curl https://flink.apache.org/q/quickstart.sh | bash -s 1.19-SNAPSHOT
空のプロジェクトを作成できます。この場合、src/main/java
ディレクトリとsrc/main/resources
ディレクトリを手動で作成し、いくつかのクラスの作成を開始する必要があります。その中で、次のGradleビルドスクリプトを使用するか、代わりに提供されているクイックスタートbashスクリプトを使用して、完全に機能するスタートアッププロジェクトを取得します。
Gradleビルドスクリプト #
これらのビルド設定スクリプトを実行するには、これらのスクリプトが含まれるディレクトリ内でgradle
コマンドを実行します。
build.gradle
plugins {
id 'java'
id 'application'
// shadow plugin to produce fat JARs
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
// artifact properties
group = 'org.quickstart'
version = '0.1-SNAPSHOT'
mainClassName = 'org.quickstart.DataStreamJob'
description = """Flink Quickstart Job"""
ext {
javaVersion = '1.8'
flinkVersion = '1.19-SNAPSHOT'
scalaBinaryVersion = '_2.12'
slf4jVersion = '1.7.36'
log4jVersion = '2.17.1'
}
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
applicationDefaultJvmArgs = ["-Dlog4j.configurationFile=log4j2.properties"]
// declare where to find the dependencies of your project
repositories {
mavenCentral()
maven {
url "https://repository.apache.org/content/repositories/snapshots"
mavenContent {
snapshotsOnly()
}
}
}
// NOTE: We cannot use "compileOnly" or "shadow" configurations since then we could not run code
// in the IDE or with "gradle run". We also cannot exclude transitive dependencies from the
// shadowJar yet (see https://github.com/johnrengelman/shadow/issues/159).
// -> Explicitly define the // libraries we want to be included in the "flinkShadowJar" configuration!
configurations {
flinkShadowJar // dependencies which go into the shadowJar
// always exclude these (also from transitive dependencies) since they are provided by Flink
flinkShadowJar.exclude group: 'org.apache.flink', module: 'force-shading'
flinkShadowJar.exclude group: 'com.google.code.findbugs', module: 'jsr305'
flinkShadowJar.exclude group: 'org.slf4j'
flinkShadowJar.exclude group: 'org.apache.logging.log4j'
}
// declare the dependencies for your production and test code
dependencies {
// --------------------------------------------------------------
// Compile-time dependencies that should NOT be part of the
// shadow (uber) jar and are provided in the lib folder of Flink
// --------------------------------------------------------------
implementation "org.apache.flink:flink-streaming-java:${flinkVersion}"
implementation "org.apache.flink:flink-clients:${flinkVersion}"
// --------------------------------------------------------------
// Dependencies that should be part of the shadow jar, e.g.
// connectors. These must be in the flinkShadowJar configuration!
// --------------------------------------------------------------
//flinkShadowJar "org.apache.flink:flink-connector-kafka:${flinkVersion}"
runtimeOnly "org.apache.logging.log4j:log4j-slf4j-impl:${log4jVersion}"
runtimeOnly "org.apache.logging.log4j:log4j-api:${log4jVersion}"
runtimeOnly "org.apache.logging.log4j:log4j-core:${log4jVersion}"
// Add test dependencies here.
// testCompile "junit:junit:4.12"
}
// make compileOnly dependencies available for tests:
sourceSets {
main.compileClasspath += configurations.flinkShadowJar
main.runtimeClasspath += configurations.flinkShadowJar
test.compileClasspath += configurations.flinkShadowJar
test.runtimeClasspath += configurations.flinkShadowJar
javadoc.classpath += configurations.flinkShadowJar
}
run.classpath = sourceSets.main.runtimeClasspath
jar {
manifest {
attributes 'Built-By': System.getProperty('user.name'),
'Build-Jdk': System.getProperty('java.version')
}
}
shadowJar {
configurations = [project.configurations.flinkShadowJar]
}
settings.gradle
rootProject.name = 'quickstart'
クイックスタートスクリプト #
bash -c "$(curl https://flink.apache.org/q/gradle-quickstart.sh)" -- 1.19-SNAPSHOT _2.12
どの依存関係が必要ですか? #
Flinkジョブを始めるには、一般的に次の依存関係を必要とします:
- ジョブを開発するためのFlink API
- ジョブを外部システムと統合するためのコネクタとフォーマット
- ジョブをテストするためのテストユーティリティ
これらに加えて、カスタム関数の開発に必要なサードパーティの依存関係を追加することもできます。
Flink APIs #
Flinkは、Datastream APIとTable API & SQLの2つの主要なAPIを提供します。 ユースケースに応じて、個別に使うことも、混合して使うこともできます。
使いたいAPI | 追加したい依存関係 |
---|---|
DataStream | flink-streaming-java |
DataStream with Scala | flink-streaming-scala_2.12 |
Table API | flink-table-api-java |
Table API with Scala | flink-table-api-scala_2.12 |
Table API + DataStream | flink-table-api-java-bridge |
Table API + DataStream with Scala | flink-table-api-scala-bridge_2.12 |
これらをビルドツールのスクリプト/descriptorに含めるだけで、ジョブの開発を開始できます!
実行とパッケージ化 #
メインクラスを実行するだけでジョブを実行したい場合は、クラスパスにflink-clients
が必要です。
Table APIプログラムの場合、flink-table-runtime
とflink-table-planner-loader
も必要です。
経験則として、アプリケーションコードとそれに必要な全ての依存関係を1つのfat/uber JARにパッケージ化することを提案します。 これには、ジョブのコネクタ、フォーマット、サードパーティの依存関係のパッケージ化も含まれます。 このルールは、Java API、DataStream Scala API、前述のランタイムモジュールには適用されません。これらはFlink自体によってすでに提供されており、ジョブのuber JARに含めるべきではありません。 このジョブのJARはすでに実行中のFlinkクラスタに送信することも、ディストリビューションの変更なしにFlinkアプリケーションコンテナイメージに追加することもできます。
次は何ですか? #
- ジョブの開発を開始するには、DataStream APIとTable API & SQLをご覧ください。
- ビルドツールに応じてジョブをパッケージ化する方法の詳細については、以下の特定のガイドを参照してください:
- プロジェクト設定に関する高度なトピックについては、高度なトピックのセクションをご覧ください。