Belajar Apache Flink - Job Configuration & Deployment
Episode 11 of 23

Belajar Apache Flink - Job Configuration & Deployment

Episode ini mengajarkan cara mengemas dan menyebarkan job Flink. Kalian akan membangun uber JAR dengan dependency shading, mengenal mode deployment standalone, YARN, dan Kubernetes, mengonfigurasi resource JobManager dan TaskManager, serta mengelola lifecycle job dengan CLI dan web UI.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Sepanjang series ini kalian menjalankan job di cluster lokal. Episode 11 ini menjawab pertanyaan yang lebih besar: bagaimana membawa job dari laptop ke produksi? Jawabannya mencakup tiga lapis: mengemas kode menjadi artifact yang bisa dijalankan, memilih mode deployment, dan mengalokasikan resource yang tepat.

Kita akan membangun uber JAR dengan dependency shading, membandingkan mode standalone, YARN, dan Kubernetes, menyetel resource JobManager serta TaskManager, dan menutup dengan praktik mengelola lifecycle job. Setelah episode ini, kalian bisa menjelaskan ke tim di mana job kalian berjalan dan mengapa.

Membuat Package Job JAR

Dependency Shading dengan Maven

Job Flink bergantung pada library eksternal. Agar cluster tidak perlu tahu semua dependency, gabungkan semuanya menjadi satu uber JAR memakai Maven Shade Plugin:

Maven shade plugin di pom.xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <transformers>
      <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
    </transformers>
  </configuration>
</plugin>

ServicesResourceTransformer penting untuk connector yang memakai service loader (seperti Flink SQL). Tanpa transformer ini, metadata layanan hilang dan konektor tidak terdeteksi.

Membangun dan Mengirim JAR

Membangun uber jar
mvn clean package -DskipTests
ls target/*.jar

Perintah mvn clean package menghasilkan satu JAR berisi kode kalian dan seluruh dependency. Catat nama dan lokasi JAR ini — ia adalah satu-satunya artifact yang kalian kirim ke cluster.

Mode Deployment

Standalone

Mode standalone paling sederhana: cluster dijalankan manual dan job dikirim lewat CLI. Cocok untuk pengembangan dan beban kecil. Kekurangannya tidak ada manajemen resource otomatis — kalian mengelola sendiri kapan menambah atau mengurangi TaskManager.

YARN

Di lingkungan Hadoop, Flink berintegrasi dengan YARN. Ada dua bentuk: session (satu cluster dipakai banyak job) dan application (cluster dibuat per job lalu dihapus).

Menjalankan session YARN
./bin/yarn-session.sh -d
./bin/flink run -d target/app.jar

./bin/yarn-session.sh -d memulai session cluster YARN di latar belakang, setelah itu flink run -d mengirim job ke session tersebut. Mode application lebih direkomendasikan untuk produksi karena isolasi lebih baik.

Kubernetes

Flink on Kubernetes bisa berjalan langsung (native) atau lewat Flink Kubernetes Operator. Dengan operator, seluruh lifecycle job dideklarasikan sebagai resource:

FlinkDeployment di Kubernetes
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: order-pipeline
spec:
  image: registry.example.com/flink-job:1.0
  flinkVersion: v2_3
  jobManager:
    replicas: 1
    resource:
      memory: "2048m"
  taskManager:
    replicas: 2
    resource:
      memory: "4096m"

FlinkDeployment mendeklarasikan image, versi Flink, serta resource JobManager dan TaskManager. Operator menangani roll-out, restart, dan scaling — mode ini adalah arah utama deployment Flink modern.

Resource Configuration

JobManager dan TaskManager

Resource tiap proses diatur di config.yaml:

Resource di config.yaml
jobmanager.memory.process.size: 2048m
taskmanager.memory.process.size: 4096m
taskmanager.numberOfTaskSlots: 4
parallelism.default: 2

taskmanager.numberOfTaskSlots menentukan berapa subtask maksimal yang berjalan per TaskManager. parallelism.default menetapkan default parallelism job tanpa pengaturan eksplisit. Aturan praktis: total slot harus cukup untuk parallelism keseluruhan job, dan jangan menambah slot per TaskManager melebihi jumlah CPU yang tersedia.

Menghitung Kebutuhan Slot

Jumlah slot yang dibutuhkan = jumlah parallelism job. Jika job punya operator dengan parallelism 8, pastikan cluster memiliki minimal 8 slot. Kelebihan slot tidak masalah; kekurangan slot membuat job menunggu.

Mengelola Lifecycle Job

CLI untuk Operasi Harian

Lifecycle job via CLI
./bin/flink list -a
./bin/flink cancel <jobId>
./bin/flink stop --savepointPath /tmp/sp <jobId>

flink list -a menampilkan semua job, flink cancel menghentikan job secara paksa, dan flink stop --savepointPath menghentikan job secara anggun sambil membuat savepoint.

Web UI untuk Observasi

Web dashboard di port 8081 menampilkan lifecycle job: status RUNNING, FINISHED, FAILED, dan CANCELLED, lengkap dengan riwayat. Tab Job Manager dan Task Manager memperlihatkan penggunaan resource — penting saat memutuskan apakah parallelism perlu dinaikkan.

Alur deployment ringkas
build JAR → pilih mode deployment → atur resource → submit → monitor

Penutup

Episode 11 menutup siklus pengiriman job: mengemas kode menjadi uber JAR dengan shading, memilih antara standalone, YARN, dan Kubernetes (native atau operator), mengatur resource JobManager serta TaskManager, dan mengelola lifecycle job dengan CLI dan web UI.

Inti yang harus dibawa pulang:

  • Uber JAR dengan ServicesResourceTransformer menjamin connector terdeteksi.
  • Standalone untuk belajar, YARN untuk ekosistem Hadoop, Kubernetes untuk produksi modern.
  • FlinkDeployment mendeklarasikan image, versi, dan resource secara declarative.
  • Total slot harus menutupi parallelism job; jangan menambah slot melebihi CPU.
  • flink list, flink cancel, dan flink stop mencakup operasi lifecycle harian.

Di episode 12 selanjutnya kita akan membahas security, authentication & authorization — mengamankan komunikasi cluster dengan TLS, otentikasi Kerberos dan RBAC, mengamankan akses ke web dashboard dan REST API, serta melindungi kredensial source dan sink. Keamanan bukan fitur tambahan; ia adalah prasyarat produksi.

Belajar Apache Flink - Job Configuration & Deployment | Belajar Apache Flink