Episode ini membawa kalian mempraktikkan instalasi standalone Flink cluster dan menjalankan job pertama dengan perintah flink run. Kalian akan memahami struktur direktori Flink, konfigurasi di config.yaml, membaca log, serta mengenal lifecycle job dan web dashboard di port 8081.

Episode 2 memberi kalian konsep. Episode 3 ini mengubah konsep menjadi praktik: kita akan mengoperasikan cluster Flink sungguhan, memahami struktur direktori dan file konfigurasi, menjalankan job dengan CLI, lalu membaca lifecycle-nya dari web dashboard. Semua yang kalian lakukan di sini akan dipakai setiap hari saat bekerja dengan Flink.
Kemampuan mengoperasikan cluster bukan keterampilan tambahan — ini keterampilan inti. Engineer yang bisa membaca log dan memahami status job akan jauh lebih efektif daripada yang hanya bisa menulis kode. Episode ini adalah langkah pertama menuju level tersebut.
Pastikan JDK 17 terpasang dan folder Flink sudah ter-extract seperti episode 0. Buat variabel environment agar lebih mudah:
export FLINK_HOME=/home/kalian/flink-2.3.0
export PATH=$FLINK_HOME/bin:$PATH
flink --versionDengan PATH ter-update, perintah flink bisa dipanggil dari mana saja. Perintah flink --version seharusnya menampilkan Version: 2.3.0.
Start cluster standalone yang terdiri dari satu JobManager dan satu TaskManager:
$FLINK_HOME/bin/start-cluster.sh
jpsPerintah jps (Java Process Status) menampilkan proses JVM yang berjalan. Kalian akan melihat StandaloneSessionClusterEntrypoint (JobManager) dan TaskManagerRunner (TaskManager). Dua proses inilah jantung cluster kalian.
Folder instalasi Flink memiliki struktur standar yang penting dipahami:
| Direktori | Isi |
|---|---|
bin/ | Script CLI: flink, start-cluster.sh, sql-client.sh |
conf/ | Konfigurasi: config.yaml, log4j.properties |
lib/ | Dependency inti dan connector yang dimuat cluster |
examples/ | Job contoh siap pakai |
log/ | File log JobManager dan TaskManager |
plugins/ | Plugin opsional yang dimuat saat startup |
Memahami struktur ini membantu kalian men-deploy connector: untuk menambah Kafka connector di mode standalone, kalian meletakkan JAR-nya di lib/ lalu me-restart cluster.
flink-2.3.0/
├── bin/ → flink, start-cluster.sh, sql-client.sh
├── conf/ → config.yaml, log4j.properties
├── lib/ → flink-dist, flink-table JAR
├── examples/ → streaming, batch, table
├── log/ → .log dan .out per komponen
└── plugins/ → s3-fs, cloud-fs, dllSebelum Flink 1.19, konfigurasi utama bernama flink-conf.yaml. Sejak 1.19, file ini direstrukturisasi menjadi config.yaml dengan key berformat kebab-case. Untuk series ini yang berbasis 2.3, kita memakai config.yaml — tetapi kalian akan sering menemukan dokumentasi lama yang masih menulis flink-conf.yaml.
Beberapa key yang wajib dikenal sejak awal:
jobmanager.rpc.address: localhost
jobmanager.memory.process.size: 1600m
taskmanager.memory.process.size: 2048m
taskmanager.numberOfTaskSlots: 4
parallelism.default: 2
rest.port: 8081taskmanager.numberOfTaskSlots menentukan slot per TaskManager.parallelism.default adalah parallelism default job tanpa setting eksplisit.rest.port menentukan port REST API dan web dashboard.Ingat bahwa setiap perubahan membutuhkan restart cluster. Konfigurasi parallelism.default akan sering kalian sentuh saat bereksperimen dengan parallelism.
Log adalah sumber kebenaran saat debugging:
ls $FLINK_HOME/log/
tail -f $FLINK_HOME/log/*standalonesession*.logFile dengan akhiran .log berisi log detail komponen, sedangkan .out berisi output konsol. Biasakan tail -f pada log JobManager untuk melihat aktivitas real-time.
Perintah flink run memiliki dua mode penting:
-d): CLI langsung kembali setelah job terkirim, cocok untuk produksi.$FLINK_HOME/bin/flink run -d examples/streaming/WindowWordCount.jar \
--input /etc/passwd --output /tmp/wordcount-resultPerintah flink run -d mengirim job ke cluster dan langsung mengembalikan kontrol ke terminal. Flag -d ini akan kalian pakai terus di sepanjang series.
Beberapa flag yang sering dipakai bersama flink run:
$FLINK_HOME/bin/flink run -c com.example.WordCount target/wordcount.jar-c menentukan main class saat JAR berisi banyak class.-p mengatur parallelism job.-s <path> me-restore job dari savepoint (dibahas di episode 16).Setiap job berjalan melalui lifecycle: CREATED → RUNNING → FINISHED atau FAILED, dengan status antara seperti RESTARTING dan CANCELLING. Pantau dengan CLI:
$FLINK_HOME/bin/flink list -a
$FLINK_HOME/bin/flink cancel <jobId>Perintah flink list -a menampilkan semua job termasuk yang sudah selesai beserta job ID-nya. flink cancel <jobId> menghentikan job yang sedang berjalan.
Buka http://localhost:8081. Dashboard menampilkan:
Dari tab Job Details kalian bisa melihat grafik DAG pipeline — visualisasi langsung dari konsep source, transformasi, dan sink di episode 2. Untuk sekarang, cukup pastikan dashboard menampilkan satu TaskManager dengan slot sesuai konfigurasi.
start-cluster.sh → flink run -d job.jar → cek flink list → amati dashboard → cancel/stopEpisode 3 melatih kalian mengoperasikan cluster Flink: memahami struktur direktori dan peran setiap foldernya, mengonfigurasi config.yaml (penerus flink-conf.yaml), menjalankan job dengan flink run dalam mode attached dan detached, memantau status via CLI, serta membaca job graph dari web dashboard di port 8081.
Inti yang harus dibawa pulang:
start-cluster.sh dan diverifikasi dengan jps.config.yaml, menggantikan flink-conf.yaml.flink run -d untuk mengirim job tanpa menunggu, dan flink list -a untuk melihat semua job.log/ dan merupakan sumber utama debugging.http://localhost:8081 menampilkan job graph, parallelism, dan metrics per operator.Di episode 4 selanjutnya kita akan membahas DataStream API dan core transformations — membuat job Flink dengan Java, memakai transformasi dasar seperti map, flatMap, filter, keyBy, window, dan reduce, serta memahami stream partitioning dan parallelism. Ini adalah episode paling fundamental untuk menulis pipeline streaming kalian sendiri.