## Flink Java Dependency Management This document provides the complete Maven dependency configuration for Flink projects on Amazon Managed Service for Apache Flink. For new applications, default to Flink 2.2. For existing applications, use the user's current Flink version. **For Kinesis-specific API usage and code examples**, see `kinesis-connector-guide.md`. ### Version-Specific Dependency Mapping Not all connector versions are published for every Flink version. Use the correct combination from this table: | Dependency | Flink 1.20 | Flink 2.2 | Notes | |---|---|---|---| | `flink.version` | `1.20.3` | `2.2.0` | Core Flink artifacts use this directly | | `target.java.version` | `11` | `17` | Flink 2.x requires Java 17 minimum | | `flink-connector-kafka` | `3.4.0-1.20` | `4.0.1-2.0` | Connector uses separate versioning scheme | | `flink-connector-aws-kinesis-streams` | `5.1.0-1.20` | `6.0.0-2.0` | Connector uses separate versioning scheme | | `flink-statebackend-rocksdb` | `1.20.3` (uses `flink.version`) | `2.2.0` (uses `flink.version`) | Available for both, can also use HashMap state backend via support case in MSF for apps that have small states that can fit in memory and benefit from lower latency state access | | `aws-kinesisanalytics-runtime` | `1.2.0` | `1.2.0` | Same version for both | | `aws-msk-iam-auth` | `2.3.5` | `2.3.5` | Version-agnostic | | `maven-compiler-plugin` | `3.8.1` | `3.11.0` | Newer version recommended for Java 17 | **Flink 2.2 additional notes:** - `flink-statebackend-forst` is available as an alternative to `flink-statebackend-rocksdb` for disaggregated state management - Logging uses `log4j-slf4j-impl` (same as 1.20; older Flink versions used `slf4j-log4j12`) - See `flink-2x-migration.md` for API changes that affect application code (e.g., `open(OpenContext)`, `Duration` instead of `Time`, removed `SourceFunction`/`SinkFunction`) ### Example pom.xml for a Flink project The example below defaults to Flink 2.2 properties (recommended for new applications). To use Flink 1.20 for existing applications, replace the properties block with the Flink 1.20 values from the table above. ```xml 4.0.0 com.example my-flink-app 1.0 jar UTF-8 ${project.basedir}/target ${project.name}-${project.version} 17 ${target.java.version} ${target.java.version} 2.2.0 1.2.0 2.23.1 4.0.1-2.0 2.3.5 6.0.0-2.0 3.11.0 com.amazonaws aws-java-sdk-bom 1.12.677 pom import org.apache.flink flink-clients ${flink.version} provided org.apache.flink flink-streaming-java ${flink.version} provided org.apache.flink flink-runtime-web ${flink.version} provided org.apache.flink flink-connector-base ${flink.version} provided org.apache.flink flink-table-runtime ${flink.version} provided com.amazonaws aws-kinesisanalytics-runtime ${kda.runtime.version} provided org.apache.flink flink-connector-kafka ${kafka.version} software.amazon.msk aws-msk-iam-auth ${msk-iam-auth.version} org.apache.flink flink-connector-aws-kinesis-streams ${kinesis-streams.version} org.apache.flink flink-statebackend-rocksdb ${flink.version} com.fasterxml.jackson.core jackson-databind 2.15.2 org.apache.flink flink-json ${flink.version} org.apache.logging.log4j log4j-slf4j-impl ${log4j.version} org.apache.logging.log4j log4j-api ${log4j.version} org.apache.logging.log4j log4j-core ${log4j.version} local org.apache.flink flink-clients ${flink.version} compile org.apache.flink flink-streaming-java ${flink.version} compile org.apache.flink flink-runtime-web ${flink.version} compile org.apache.flink flink-connector-base ${flink.version} compile com.amazonaws aws-kinesisanalytics-runtime ${kda.runtime.version} compile ${buildDirectory} ${jar.finalName} org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.plugin.version} ${target.java.version} ${target.java.version} org.apache.maven.plugins maven-shade-plugin 3.2.1 package shade org.apache.flink:force-shading com.google.code.findbugs:jsr305 *:* META-INF/*.SF META-INF/*.DSA META-INF/*.RSA com.example.MyFlinkJob ```