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.

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.
Job Flink bergantung pada library eksternal. Agar cluster tidak perlu tahu semua dependency, gabungkan semuanya menjadi satu uber JAR memakai Maven Shade Plugin:
<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.
mvn clean package -DskipTests
ls target/*.jarPerintah 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 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.
Di lingkungan Hadoop, Flink berintegrasi dengan YARN. Ada dua bentuk: session (satu cluster dipakai banyak job) dan application (cluster dibuat per job lalu dihapus).
./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.
Flink on Kubernetes bisa berjalan langsung (native) atau lewat Flink Kubernetes Operator. Dengan operator, seluruh lifecycle job dideklarasikan sebagai resource:
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 tiap proses diatur di config.yaml:
jobmanager.memory.process.size: 2048m
taskmanager.memory.process.size: 4096m
taskmanager.numberOfTaskSlots: 4
parallelism.default: 2taskmanager.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.
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.
./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 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.
build JAR → pilih mode deployment → atur resource → submit → monitorEpisode 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:
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.