Episode ini mengupas sejarah dan latar belakang lahirnya Apache Flink, evolusi stream processing dari batch ke real-time, serta perbandingannya dengan Spark Streaming, Kafka Streams, dan Beam. Kalian juga akan memahami use case ideal Flink: stateful stream processing, event-driven analytics, CEP, dan real-time pipelines.

Episode 0 sudah memastikan environment kalian siap. Sekarang saatnya memahami mengapa Flink ada. Episode 1 ini menjawab tiga pertanyaan besar: dari mana Apache Flink berasal, bagaimana posisinya di ekosistem big data, dan mengapa kalian — sebagai engineer data atau backend yang membangun sistem real-time — membutuhkannya.
Banyak orang mulai memakai Flink karena tutorial, padahal memahami latar belakangnya jauh lebih berharga. Dengan tahu masalah yang diselesaikan, kalian akan lebih mudah memutuskan kapan memakai Flink, kapan tidak, dan bagaimana memposisikannya dalam arsitektur. Mari kita mulai dari awal cerita.
Dunia data processing dimulai dari batch. Pada era Hadoop (awal 2010-an), data yang mengalir disimpan dulu, lalu diproses secara berkala — harian, per jam, atau per menit. Model MapReduce dan Spark Batch bekerja dalam siklus: baca, proses, tulis, selesai. Pendekatan ini andal dan sederhana, tetapi memiliki latency tinggi: keputusan dibuat berdasarkan data yang mungkin sudah berumur menit hingga jam.
Ketika bisnis mulai menuntut respons seketika — deteksi fraud saat transaksi terjadi, rekomendasi saat pengguna berinteraksi, monitoring infrastruktur secara langsung — paradigma batch mulai janggal. Data harus diproses segera saat tiba, tanpa menunggu batch berikutnya. Dari sinilah stream processing lahir, dan Apache Flink adalah salah satu pelopornya.
batch → micro-batch → stream processing → stateful stream processingPerintah ini menggambarkan lompatan yang ingin kita pahami: dari memproses data secara berkala menjadi memproses data sebagai aliran yang tak pernah berhenti, sambil tetap menyimpan state untuk komputasi yang bergantung pada riwayat.
Apache Flink lahir dari proyek riset Stratosphere yang dikembangkan di TU Berlin sekitar tahun 2010-2014. Berbeda dengan proyek lain yang lahir dari kebutuhan industri, Stratosphere berakar pada riset akademik tentang distributed query processing dan dataflow — dan dari sinilah muncul inovasi yang menjadi DNA Flink sampai sekarang: true streaming engine berbasis pipelined execution, bukan micro-batch.
Pada 2014, proyek ini didonasikan ke Apache Software Foundation sebagai inkubator, dan resmi berganti nama menjadi Apache Flink. Nama Flink sendiri, dalam bahasa Jerman, berarti tangkas atau gesit — menggambarkan pendekatan yang cepat dan fleksibel.
Perjalanan Flink dari inkubator hingga menjadi salah satu engine stream processing paling mapan bisa diringkas dalam tabel berikut:
| Tahun | Versi | Kunci |
|---|---|---|
| 2014 | Incubator | Masuk Apache sebagai proyek inkubator |
| 2015 | 0.9 | Top-level project Apache |
| 2016 | 1.0 | API stabil pertama |
| 2017 | 1.3 | Incremental checkpointing |
| 2019 | 1.9 | Integrasi Table API dan SQL yang matang |
| 2021 | 1.13 | Adopsi luas untuk production streaming |
| 2024 | 1.20 | LTS pertama, konfigurasi terpusat di config.yaml |
| 2025 | 2.0 | DataStream API V2, persyaratan JDK 17 |
| 2026 | 2.3 | Stable terbaru per penulisan series ini |
Salah satu inovasi yang membedakan Flink sejak awal adalah pipelined streaming — data mengalir antar operator tanpa harus menunggu batch selesai. Konsep ini yang memungkinkan Flink memberikan latency milidetik, sesuatu yang sulit dicapai engine berbasis micro-batch.
./bin/flink --versionPerintah ./bin/flink --version menampilkan versi Flink yang terpasang di lingkungan kalian. Cek rutin seperti ini penting karena Flink merilis versi baru secara berkala dan kalian perlu tahu posisi versi kalian.
Spark Streaming memproses stream sebagai micro-batch — aliran dipotong menjadi batch kecil lalu diproses dengan engine batch Spark. Keunggulannya: ekosistem Spark yang besar dan API yang familier. Kekurangannya: latency lebih tinggi daripada true streaming, dan model pemrosesan per-batch membuat beberapa pola seperti event time menjadi kurang natural.
Kafka Streams adalah library ringan untuk stateful processing langsung di atas Kafka, dijalankan dalam aplikasi JVM biasa tanpa cluster terpisah. Sangat cocok untuk pipeline sederhana dalam satu ekosistem Kafka. Namun, untuk pipeline yang kompleks, banyak join, dan windows beragam, Kafka Streams lebih terbatas dibanding Flink yang punya source dan sink lintas sistem.
Apache Beam adalah abstraction layer — kalian menulis pipeline sekali dengan model yang terstandarisasi, lalu menjalankannya di banyak runner seperti Flink, Spark, dan Google Dataflow. Beam bukan engine, melainkan API portabel. Flink sendiri menjadi salah satu runner terbaik untuk Beam karena dukungannya terhadap event time dan state yang lengkap.
Flink → engine true streaming, stateful, latensi rendah
Spark Stream → micro-batch, ekosistem besar, latensi menengah
Kafka Streams → library ringan, terikat ekosistem Kafka
Beam → API portabel, butuh runner seperti FlinkPilih Flink jika kalian butuh true streaming dengan latency milidetik, state management yang kuat dengan exactly-once, event time semantics yang ketat, CEP, dan integrasi luas dengan Kafka, Kinesis, database, dan object storage. Pilih alternatif jika kebutuhan kalian sederhana, sangat terikat satu sistem, atau butuh sekadar batch.
Berikut pola aplikasi yang menjadi sweet spot Flink:
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
public class StreamingApp {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.fromElements("order", "refund", "order")
.map(String::toUpperCase)
.print();
env.execute("contoh-streaming");
}
}Kode di atas hanyalah kerangka — kita akan membedah map dan seluruh transformasi DataStream secara mendalam di episode 4. Untuk sekarang, cukup pahami bahwa env.execute adalah penanda bahwa seluruh pipeline dikompilasi dan dijalankan.
Info
Pilihan engine stream processing bukan keputusan sekali jalan. Banyak tim memulai dengan Spark atau Kafka Streams, lalu berpindah ke Flink saat kebutuhan latency, state, dan kompleksitas meningkat. Memahami latar belakang ini membantu kalian membuat keputusan yang tepat di waktunya.
Episode 1 memberi kalian konteks: Flink lahir dari proyek riset Stratosphere di TU Berlin, masuk Apache pada 2014, dan kini menjadi salah satu engine stream processing paling mapan dengan versi stabil 2.3.0 per 2026. Dia memenangkan kebutuhan true streaming dengan latensi milidetik, state management, dan event time semantics — melawan Spark Streaming yang berbasis micro-batch, Kafka Streams yang ringan namun terbatas, dan Beam yang hanya abstraction layer.
Inti yang harus dibawa pulang:
Di episode 2 selanjutnya kita akan membahas konsep dasar dan arsitektur Apache Flink — model stream dan DataStream API, konsep event time, processing time, dan ingestion time, stateful computation dengan state backend dan checkpointing, serta arsitektur eksekusi dengan JobManager, TaskManager, slot, dan parallelism. Ini adalah fondasi arsitektural yang akan menemani seluruh series.