Penjelasan Apache Airflow: Panduan Ramah Pemula
Pendahuluan
Perusahaan modern yang berbasis data semuanya mengandalkan saluran data yang mengambil, mentransformasi, memperkaya, dan memindahkan informasi dari satu lokasi ke lokasi lain. Saluran data ini mungkin melibatkan banyak langkah (mengambil data mentah, membersihkannya, melatih model machine learning, membangun dasbor, dll.). Selain itu, mereka harus dijalankan dalam urutan yang sangat spesifik. Alat orkestrasi alur kerja seperti Apache Airflow membantu memastikan bahwa semua langkah ini dijalankan pada waktu yang tepat dan dalam urutan yang benar. Alat ini juga membuat saluran data mudah untuk dipantau dan dikelola.
Airflow dibuat di Airbnb pada tahun 2014 dan telah menjadi salah satu platform orkestrasi alur kerja open‑source yang paling populer. Platform ini digunakan oleh ribuan organisasi untuk mengotomatisasi dan memantau jalur batch. Dalam artikel ini, kami menjelaskan Apache Airflow dari dasar. Topik yang akan kami bahas meliputi:
- Apa itu Airflow, apa fungsinya, dan mengapa tim data menggunakannya.
- Konsep inti dan komponen-komponen Airflow, serta bagaimana semuanya saling terhubung.
- Bagaimana pipeline didefinisikan sebagai Directed Acyclic Graphs (DAG) dan panduan langkah demi langkah tentang DAG sederhana yang sedang berjalan.
- Kasus penggunaan umum seperti ETL/ELT, MLOps, dan lainnya.
Kami berharap ini akan menjadi pengenalan praktis yang berbasis contoh tentang Apache Airflow bagi para insinyur, mahasiswa, dan tim yang baru memulai dengan orkestrasi alur kerja.
Intisari Penting
- Apache Airflow adalah platform orkestrasi alur kerja berbasis Python yang mengelola, menjadwalkan, dan memantau pipeline data yang kompleks menggunakan DAG (Directed Acyclic Graphs).
- DAG mendefinisikan tugas dan ketergantungannya, memungkinkan Airflow mengeksekusi setiap langkah dalam urutan yang benar dengan fitur percobaan ulang, pencatatan, dan pemantauan bawaan.
- Arsitektur Airflow (Scheduler, Executor, Worker, Metadata DB, Web UI) memungkinkan eksekusi yang skalabel, terdistribusi, dan pemantauan pipeline secara real-time.
- Airflow unggul dalam alur kerja batch seperti pekerjaan ETL/ELT, pipeline pelatihan ML, pemeriksaan kualitas data, dan analitik terjadwal — tetapi tidak ideal untuk pekerjaan real-time atau frekuensi sangat tinggi.
- Alternatif seperti Prefect, Dagster, Luigi, Argo Workflows, dan Mage AI mungkin lebih cocok tergantung pada kebutuhan seperti alur kerja berbasis peristiwa, eksekusi natif Kubernetes, atau antarmuka modern yang ramah bagi pengembang.
Apa Itu Apache Airflow?
Apache Airflow adalah sistem open-source untuk membuat, menjadwalkan, dan memantau alur kerja. Alur kerja Airflow adalah DAG (graf berarah tak bersiklus), yang merupakan serangkaian tugas dengan hubungan yang jelas (dependensi) dan tanpa siklus (sebuah tugas tidak bisa mengulangi dirinya sendiri di upstream). Filosofi inti Airflow adalah "konfigurasi sebagai kode," sehingga alih-alih menggunakan antarmuka UI dengan drag-and-drop, Anda menulis skrip Python untuk merepresentasikan alur kerja. Pendekatan ini memberikan fleksibilitas signifikan bagi para insinyur: Anda dapat terhubung ke hampir semua teknologi melalui operator Airflow dan pustaka Python. Anda juga dapat menerapkan praktik terbaik rekayasa perangkat lunak (kontrol versi, pengujian, dll.) pada definisi pipeline Anda.
Mengapa orkestrasi alur kerja itu penting?
Poin utamanya adalah bahwa seringkali Anda memiliki beberapa langkah dalam alur kerja data yang harus dijalankan secara berurutan. Contoh sederhana adalah pipeline ETL (Extract/Transform/Load). Pipeline dapat dengan cepat menjadi lebih kompleks saat Anda menambahkan lebih banyak tugas, ketergantungan, percabangan, dan sebagainya, serta perlu dijalankan secara berkala. Intervensi manual atau alat penjadwalan sederhana sering kali menjadi tidak memadai dalam kasus-kasus ini. Airflow menyelesaikan masalah ini dengan bertindak sebagai pengatur pusat. Ini memiliki grafik berarah tak siklik (DAG) dari tugas-tugas (node) dengan ketergantungan (edge). Airflow mengetahui kapan harus mengeksekusi tugas tertentu (menunggu ketergantungan hulu selesai sebelum dijalankan), termasuk penjadwalan (eksekusi interval periodik), penanganan kesalahan (percobaan ulang otomatis, peringatan), dan pencatatan.
Jika kita menganggap seluruh alur data sebagai sebuah resep, maka setiap tugas individu adalah sub-langkah (memotong, merebus, menyajikan, dll.). Airflow seperti manajer dapur yang mengetahui resep-resep tersebut dan mengawasi semua sub-langkah yang terjadi di setiap dapur, memastikan bahwa semuanya terjadi dalam urutan yang benar dan pada waktu yang tepat.
Tanpa orkestrasi alur kerja, Anda mungkin memiliki semua koki dan bahan, tetapi mereka tidak terkoordinasi. Airflow menyediakan koordinasi tersebut, memungkinkan produksi "hidangan" yang diinginkan (jalannya alur kerja).
Mengapa Tim Data Menggunakan Airflow?
Airflow telah menjadi populer di kalangan insinyur data, insinyur ML, dan tim DevOps karena ini memenuhi banyak kebutuhan dari pipeline data yang kompleks. Berikut beberapa alasan besar mengapa tim memilih Airflow:
- Mengatur Alur Kerja & Ketergantungan yang Kompleks: Airflow dirancang untuk alur kerja dengan jumlah langkah yang saling bergantung satu sama lain. Airflow memudahkan untuk menyatakan kebutuhan hulu dan hilir, memastikan bahwa tugas dijalankan dalam urutan yang tepat. Jika tugas C tergantung pada tugas A dan B, penjadwal Airflow akan mengetahui hubungan ini dan memastikan bahwa A dan B dijalankan (mungkin secara paralel) sebelum menjalankan C. Airflow dapat menangani ketergantungan yang kompleks, logika bercabang, dan sebagainya.
- Penjadwalan Terpusat (Cron yang Ditingkatkan): Ini menyediakan sebuah penjadwal yang memungkinkan Anda mengeksekusi tugas pada jadwal tertentu. Anda bisa mendefinisikan puluhan atau ratusan pipeline yang memicu tugas pada waktu yang berbeda (setiap jam, harian, bulanan) menggunakan penjadwal Airflow. Airflow memahami hubungan antar tugas. Ini dapat menjadwalkan dan memicu tugas untuk dijalankan secara cerdas. Penjadwal terpusat membebaskan Anda dari keharusan menulis skrip yang berbeda di server yang berbeda.
- Skalabilitas dan Eksekusi Terdistribusi: Airflow juga dapat menyesuaikan skala dengan alur kerja Anda. Ini dapat dikonfigurasi untuk mengeksekusi tugas secara paralel di berbagai proses atau mesin pekerja. Airflow juga menyediakan berbagai eksekutor (akan dibahas lebih lanjut dalam artikel ini) yang dapat menjalankan tugas di sistem terdistribusi seperti Celery atau Kubernetes di seluruh cluster node. Ini berarti Anda dapat memparalelkan tugas berat (pemrosesan data besar) dan memiliki beberapa pipeline yang berjalan secara bersamaan.
- Monitoring, Logging, dan Peringatan: Aplikasi ini dilengkapi dengan antarmuka web yang kaya yang memberikan visibilitas waktu nyata ke dalam alur kerja Anda. Anda dapat melihat tugas mana yang berhasil dan mana yang gagal, serta melihat keluaran log untuk setiap tugas. Anda bahkan bisa memicu secara manual dan/atau mencoba kembali tugas melalui antarmuka web.
Komponen Utama Airflow
Berikut adalah gambaran singkat tentang blok bangunan inti Apache Airflow. Gunakan tabel ini sebagai referensi cepat untuk memahami apa masing-masing komponen dan fungsinya.
| Komponen | Apa itu | Tanggung jawab utama |
|---|---|---|
| DAGs (Graf Berarah Tak Bersiklus) | Blueprint alur kerja ditulis dalam Python; sebuah grafik tugas dengan dependensi dan tanpa siklus. | Menentukan tugas mana yang dijalankan dan dalam urutan apa; menyandikan jadwal dan metadata; memungkinkan visualisasi di antarmuka pengguna. |
| Tugas | Unit kerja terkecil (node dalam grafik DAG) dibuat dari operator atau fungsi TaskFlow. | Menjalankan tindakan tertentu (misalnya, menjalankan SQL, memanggil Python, memicu API, memindahkan file); melaporkan keberhasilan/kegagalan. |
| Penjadwal | Layanan yang terus-menerus mengevaluasi DAG dan status tugas. | Menentukan kapan setiap tugas harus dijalankan berdasarkan jadwal dan ketergantungan; membuat instansi tugas; mengelola percobaan ulang dan pengisian kembali. |
| Pelaksana (dan Pekerja) | Backend eksekusi dan proses yang benar-benar menjalankan tugas. | Meluncurkan instance tugas di backend yang dipilih (proses/thread lokal, pekerja Celery, pod Kubernetes); mengembalikan hasil ke Penjadwal. |
| Server Web (Antarmuka Web) | Antarmuka pengguna operasional yang dilayani oleh server web Airflow. | Observabilitas dan kontrol: melihat DAG, memicu/membersihkan tugas, memeriksa log, menjeda DAG, mengelola koneksi/variabel. |
| Basis Data Metadata | Sistem pencatatan yang persisten (biasanya PostgreSQL/MySQL). | Menyimpan jalannya DAG, instance tugas, dan status, konfigurasi, metadata log, serta riwayat operasional. |
Cara Kerja Airflow (Arsitektur)
Berikut adalah gambaran langkah demi langkah tentang bagaimana Airflow memproses alur kerja (DAG):
- Membuat DAG: Penulis DAG menulis skrip Python yang mendefinisikan sebuah DAG. Skrip ini mencakup hal-hal seperti jadwal (misalnya, “jalankan setiap hari pukul 9 pagi”) atau pengaturan pemicu manual. Skrip ini juga berisi definisi tugas-tugas (melalui operator atau fungsi @task), serta dependensi tugas (misalnya, task1 >> task2 (task2 menunggu task1 selesai)). File Python ini disimpan di folder DAG Airflow agar bisa ditemukan oleh Airflow. Airflow akan membaca (mem-parsing) file ini secara berkala untuk memuat definisi DAG.
- Penjadwalan dan Parsing DAG: Airflow Scheduler adalah sebuah proses yang berjalan terus-menerus di latar belakang. Ia memeriksa apakah setiap DAG seharusnya dijalankan berdasarkan jadwal atau pemicunya. Misalnya, sebuah DAG dengan jadwal "harian" dapat diambil oleh scheduler, dan menyadari bahwa jalannya yang baru harus dijadwalkan pada tengah malam. Airflow Scheduler juga memeriksa apakah tugas-tugas dalam DAG siap dijalankan – yang berarti semua dependensi hulu mereka telah selesai dan waktu yang dijadwalkan (tanggal logis) telah tiba.
- Menjalankan Tugas: Setiap tugas yang akan dijalankan diserahkan kepada Pelaksana dari Penjadwal. Pelaksana memutuskan di mana dan bagaimana menjalankan tugas tersebut. Tugas bisa dijalankan secara lokal atau dikirim ke antrian pekerja. Untuk arsitektur terdistribusi, tugas akan ditambahkan ke antrian dan kemudian dipilih oleh proses Pekerja yang mengeksekusi tugas.
- Memperbarui Status & Penanganan Kesalahan: Setiap instance tugas melaporkan statusnya (sukses, gagal, dll.) kembali ke penjadwal saat selesai, dan penjadwal memperbarui database metadata dengan status tugas.
Pelacakan status memungkinkan penjadwal mengetahui langkah selanjutnya – misalnya, jika Tugas A telah selesai dengan sukses, penjadwal tahu bahwa sekarang bisa menjadwalkan Tugas B, atau jika Tugas A gagal namun masih ada percobaan ulang yang tersisa, maka dijadwalkan percobaan ulang, atau jika gagal tanpa percobaan ulang tersisa, penjadwal menandai jalannya DAG sebagai gagal. Jika sebuah tugas gagal, Airflow memiliki logika untuk secara otomatis mencoba kembali tugas tersebut jika dikonfigurasi untuk percobaan ulang. Jika tugas terus gagal setelah percobaan ulang, Airflow dapat memberikan peringatan tentang kegagalan (mengirim email atau pesan Slack, dll.). Semua ini dapat dikonfigurasi sebagai bagian dari parameter DAG atau tugas (misalnya, jumlah percobaan ulang, jeda percobaan ulang, email untuk dikirim saat peringatan). - Monitoring dan Intervensi: Airflow Web UI menyediakan antarmuka langsung dari proses di atas. Anda dapat melihat jalannya DAG muncul (misalnya, sebuah baris baru di tampilan Tree untuk jalannya hari ini), dan melihat status tugas berubah seiring kemajuannya. Tampilan Graph memvisualisasikan tugas-tugas dalam DAG, dan menunjukkan mana yang telah selesai atau mengalami kesalahan.
- Pembersihan dan Jalannya Berikutnya: Ketika sebuah DAG run selesai (semua tugas telah berhasil atau dilewati/gagal), Airflow melanjutkan ke jalannya yang dijadwalkan berikutnya. Semua metadata mengenai jalannya sebelumnya tetap disimpan di dalam database, dan Anda selalu dapat memeriksa riwayatnya. Scheduler akan terus memicu jalannya baru sesuai jadwal atau pemicu manual. Proses ini diulang hingga proses Airflow dihentikan.
Memahami DAG di Airflow
Sebuah DAG di Airflow mendefinisikan jadwal, serta tugas dan ketergantungan yang diperlukan untuk menjalankan sebuah alur kerja. DAG tidak perlu mengetahui apa yang ada di dalam setiap tugas; yang penting adalah menentukan kapan dan dalam urutan apa mereka harus dijalankan.
Tugas, operator, dan sensor
Tugas adalah unit kerja dasar di Airflow. Di Airflow, tugas adalah instance dari operator, yang merupakan template untuk tindakan yang telah ditentukan sebelumnya. Airflow dilengkapi dengan berbagai operator inti. BashOperator memungkinkan Anda menjalankan perintah shell, dan PythonOperator memungkinkan Anda memanggil fungsi Python. Airflow juga menyediakan dekorator @task, yang memungkinkan Anda mengubah fungsi Python biasa menjadi tugas.
Selain operator, Airflow menyediakan sensor. Sensor adalah tugas yang menunggu suatu kondisi atau peristiwa terpenuhi sebelum berhasil. Mereka dapat digunakan untuk hal-hal seperti menunggu file muncul atau sebuah tabel terisi.
Ketergantungan tugas
Untuk mendeklarasikan ketergantungan antara tugas, Anda menggunakan operator >> dan << (disarankan) atau metode seperti set_upstream dan set_downstream. Anda juga dapat menyusun tugas secara berantai, membuat ketergantungan lintas‑downstream, dan bahkan membangun daftar tugas secara dinamis. Sebuah DAG tanpa ketergantungan sama sekali hanya akan menjadi sekumpulan tugas yang independen.
Praktik terbaik untuk desain DAG
Tabel di bawah ini menyajikan beberapa pedoman yang perlu diingat saat merancang DAG.
| Praktik Terbaik | Deskripsi | Tips/Contoh Praktis |
|---|---|---|
| Pastikan DAG benar-benar tanpa siklus | DAG tidak boleh mengandung siklus. Dalam alur kerja yang kompleks, mudah untuk memperkenalkan loop tidak langsung (misalnya, A → B → C → A). Airflow secara otomatis mendeteksi siklus dan menolak menjalankan DAG tersebut. | Tinjau dependensi secara berkala. Gunakan Tampilan Grafik untuk secara visual memastikan DAG tidak memiliki loop. Refaktor DAG yang kompleks untuk menghindari siklus yang tidak sengaja. |
| Jaga tugas tetap idempoten dan kecil | Setiap tugas harus melakukan satu langkah logis dan aman dijalankan ulang tanpa merusak data. Tugas idempoten memastikan pengulangan tidak menghasilkan hasil yang tidak konsisten. | Gunakan pola "sisipkan atau ganti". Tulis ke file sementara sebelum menyimpan hasil. Pisahkan skrip besar menjadi beberapa tugas. |
| Gunakan ID dan dokumentasi yang deskriptif | Penamaan dan dokumentasi yang jelas meningkatkan keterbacaan dan pemeliharaan baik dalam kode maupun antarmuka Airflow. | Gunakan ID DAG dan ID tugas yang bermakna. Tambahkan dokumentasi menggunakan dag.doc_md atau task.doc_md. Sesuaikan nama dengan logika bisnis. |
| Manfaatkan fitur Airflow | Gunakan kemampuan bawaan Airflow untuk komunikasi, penanganan kredensial, dan koordinasi pipeline daripada logika kustom. | Gunakan XComs untuk berbagi data kecil. Gunakan Variabel dan Koneksi untuk konfigurasi dan rahasia. Gunakan operator dan hook bawaan kapan pun memungkinkan. |
| Uji dan kendalikan versi kode DAG | DAG adalah kode dan harus dipelihara menggunakan praktik rekayasa perangkat lunak yang tepat: pengendalian versi, pengujian, dan CI/CD. | Simpan DAG di Git. Tulis pengujian untuk operator dan logika kustom. Gunakan lingkungan lokal/test sebelum menerapkan ke produksi. |
| Hindari membebani penjadwal | Jumlah besar DAG atau perhitungan berat di dalam file DAG dapat memperlambat penjadwal. DAG sebaiknya ringan untuk diproses. | Pantau kinerja penjadwal. Pisahkan DAG besar menjadi yang lebih kecil. Hindari panggilan API atau komputasi berat saat impor DAG. |
| Tetapkan strategi penanganan kegagalan yang jelas | Rencanakan bagaimana kegagalan harus ditangani. Tidak semua kesalahan harus dicoba kembali, dan tugas yang berjalan lama mungkin memerlukan SLA atau peringatan. | Gunakan percobaan ulang hanya untuk kegagalan sementara. Gunakan Sensor dan pemicu untuk ketergantungan berbasis peristiwa. Tetapkan SLA untuk tugas yang panjang atau penting. |
Contoh: DAG Airflow Sederhana
Tidak ada yang lebih memperkuat pemahaman konsep daripada sebuah contoh. Mari kita lihat kode DAG Airflow sederhana dan jelaskan bagiannya. Contoh ini akan membuat alur kerja kecil dengan dua tugas secara berurutan:
from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator
# Define the DAG and its schedule
with DAG(
dag_id="example_dag",
description="A simple example DAG",
start_date=datetime(2025, 1, 1),
schedule_interval="@daily", # runs daily
catchup=False
) as dag:
# Task 1: Print current date
task1 = BashOperator(
task_id="print_date",
bash_command="date"
)
# Task 2: Echo a message
task2 = BashOperator(
task_id="echo_hello",
bash_command="echo 'Hello, Airflow!'"
)
# Define dependency: task1 must run before task2
task1 >> task2Mari kita uraikan apa yang sedang terjadi di sini:
- impor kelas yang dibutuhkan DAG (untuk mendefinisikan DAG), dan BashOperator (untuk menjalankan perintah shell/bash dalam tugas). Kami juga mengimpor datetime untuk menentukan tanggal mulai DAG.
- Kami membuat objek DAG dengan manajer konteks (with DAG(…) as dag:). Berikan DAG sebuah ID unik “example_dag” (harus unik di lingkungan Airflow), deskripsi (opsional, untuk membantu manusia membaca), start_date, dan schedule_interval. Di sini, kami mengatur schedule_interval preset (@daily) bawaan, dan start_date=datetime(2025,1,1). Kami juga telah mengatur catchup=False untuk mencegah backfilling dari setiap eksekusi yang terlewat antara start_date dan hari ini (kami hanya ingin menjalankannya mulai sekarang setiap hari). Blok ini secara keseluruhan membuat DAG yang akan dikenali oleh Airflow untuk dijalankan setiap pagi.
- Kemudian kita mendefinisikan dua tugas dalam konteks DAG:
- task1 didefinisikan menggunakan BashOperator untuk menjalankan perintah bash (date). task_id adalah “print_date” dan akan digunakan untuk mengidentifikasi tugas ini di UI dan dalam log. Saat dijalankan, tugas ini hanya akan mencetak tanggal/waktu saat ini (ke log tugas).
- task2 juga menggunakan BashOperator dengan task_id=“echo_hello”, dan command=echo ‘Hello, Airflow!’. Ini akan menampilkan pesan yang bagus. Saat ini tugas-tugas ini hanya didefinisikan, belum terhubung.
- Baris terakhir (task1 >> task2) menentukan sebuah ketergantungan (alur): task1 mengalir ke task2. Ini berarti task1 akan dijalankan dan selesai dengan sukses sebelum task2 dapat dipertimbangkan untuk dijadwalkan. Secara grafis, dalam grafik DAG, akan ada panah yang menunjuk dari task1 ke task2.
Beberapa hal yang perlu dicatat dalam contoh ini:
- Kami hanya menggunakan BashOperator untuk kesederhanaan, tetapi kami bisa saja menggunakan DAG dengan berbagai jenis operator. Kami bisa menggunakan PythonOperator untuk memanggil fungsi Python, atau SimpleHttpOperator untuk mengakses API, dan sebagainya.
- Pola dengan DAG(…) sebagai dag: adalah idiom umum untuk membuat instance DAG. Semua tugas yang dibuat di dalamnya secara otomatis terkait dengan DAG tersebut.
- catchup=False adalah parameter yang digunakan di banyak DAG dengan start_date di masa lalu, ketika Anda tidak ingin DAG tersebut dijalankan untuk semua tanggal sebelumnya. Jika kita membiarkan catchup=True (default) dan hari ini adalah 10 Januari 2025, Airflow akan mencoba menjalankan DAG untuk 1, 2, 3 Januari, … hingga 10 Januari, mengejar ketertinggalan hari-hari yang terlewat tersebut. Kami mematikannya di sini untuk kesederhanaan.
- Contoh ini menggunakan jalur impor relatif untuk BashOperator. Di Airflow 2, banyak operator dipindahkan di bawah airflow.providers. Contoh ini ditulis dengan asumsi bahwa penyedia tersebut sudah terinstal (BashOperator ada di Airflow inti itu sendiri).
Contoh sederhana ini dapat dengan mudah diperluas – Anda bisa menambahkan tugas tambahan (mungkin melakukan panggilan API, kemudian memuat hasil ke database, lalu mengirim notifikasi). Anda juga bisa menambahkan logika yang lebih kompleks (seperti percabangan – Airflow mendukung percabangan gaya if/else menggunakan BranchOperator, misalnya).
Seiring DAG Anda menjadi lebih besar, UI dan logging Airflow menjadi sangat berharga untuk mengetahui apa yang sedang terjadi. Dalam contoh ini, log untuk print_date akan berisi tanggal sistem yang dicetak, dan log untuk echo_hello akan berisi “Hello, Airflow!”. Jika print_date gagal (mungkin karena tidak bisa menemukan perintah date, dalam skenario hipotetis), maka echo_hello tidak akan pernah dijalankan (karena ketergantungan), dan eksekusi DAG akan ditandai sebagai gagal. Anda kemudian bisa memeriksa log, memperbaiki masalah, dan menjalankan ulang tugas tersebut atau seluruh DAG.
Kasus Penggunaan Umum untuk Airflow
Berikut adalah ringkasan terstruktur dari kasus penggunaan umum Apache Airflow. Tabel ini menyoroti apa yang terlibat dalam setiap kasus penggunaan dan bagaimana Airflow memberikan nilai dalam konteks tersebut.
| Kasus Penggunaan | Deskripsi (Apa yang Terlibat & Langkah-langkah Umum) | Bagaimana Airflow Membantu/Manfaatnya |
|---|---|---|
| Pipa Data ETL/ELT | Memindahkan data dari berbagai sumber ke dalam gudang data atau danau data menggunakan pola ETL (Extract–Transform–Load) atau ELT. | DAG mengatur ekstraksi → transformasi → pemuatan dalam urutan yang benar. Airflow terintegrasi dengan banyak database dan sistem penyimpanan. Jika sebuah langkah gagal (misalnya, API tidak aktif), tugas-tugas selanjutnya dihentikan, dan peringatan bisa dipicu, meningkatkan keandalan untuk sinkronisasi batch dan inkremental. |
| Data Warehousing & Pelaporan BI | Menyiapkan dan menyegarkan data analitik yang digunakan dalam dasbor dan laporan. | Menjadwalkan pekerjaan harian atau berkala sehingga laporan selalu dijalankan dengan data terbaru. Mengkoordinasikan beban kerja SQL, pemeriksaan kualitas, dan langkah-langkah pelaporan. Menyediakan pemantauan dan notifikasi sehingga kegagalan (misalnya, agregasi yang rusak) terlihat dan tidak merusak output BI secara diam-diam. |
| Alur Kerja Machine Learning | Mengotomatisasi alur kerja ML dari awal hingga akhir, mulai dari persiapan data hingga penerapan. | Mewakili setiap tahap ML sebagai tugas dalam DAG dan menegakkan urutan yang benar. Dapat menyimpan artefak antar langkah (data yang telah diproses, biner model). Terintegrasi dengan kerangka kerja ML dan operator Kubernetes serta memungkinkan pelatihan ulang terjadwal dan orkestrasi eksperimen selama jam sibuk rendah. |
| Pemeriksaan & Validasi Kualitas Data | Menjalankan pemeriksaan otomatis untuk memastikan data lengkap, konsisten, dan dapat dipercaya. | Menjadwalkan DAG kualitas data yang berulang (harian/mingguan). Mengkoordinasikan pemeriksaan di berbagai basis data dan skrip QA, memberi peringatan kepada tim tentang anomali, dan dapat memicu tugas koreksi lanjutan sebagai bagian dari rekayasa keandalan data. |
| Perawatan & Cadangan DB Transaksional | Mengotomatisasi tugas operasional rutin untuk basis data produksi dan infrastruktur. | Mencentralisasi penjadwalan dan pemantauan tugas pemeliharaan. Memastikan backup dan housekeeping berjalan secara konsisten pada waktu yang telah ditentukan, mengurangi upaya manual dan kesalahan manusia, serta menyediakan catatan/riwayat sehingga tim dapat memastikan bahwa pekerjaan pemeliharaan penting selesai dengan sukses. |
| Integrasi/Otomatisasi Alur Kerja | Mengatur alur kerja bisnis atau sistem yang mencakup berbagai layanan dan API. | Bertindak sebagai lapisan "perekat" yang fleksibel yang menghubungkan layanan. DAG mengekode percabangan kompleks dan logika bersyarat. Operator dan tugas Python memungkinkan integrasi kustom. Menyediakan tempat pusat untuk mengelola, memantau, dan mencoba kembali langkah-langkah proses bisnis alih-alih menyebarkan logika otomasi di berbagai skrip dan alat ad-hoc. |
Kapan TIDAK Menggunakan Airflow
Meskipun Airflow kuat, itu bukan alat yang tepat untuk setiap situasi. Memahami keterbatasannya membantu Anda memilih pendekatan orkestrasi yang tepat:
- Workload Waktu Nyata atau Streaming: Airflow berorientasi batch dengan awal dan akhir yang jelas. Ini tidak cocok untuk workload yang berjalan lama, berbasis peristiwa, atau streaming. Jika Anda sedang mengolah aliran peristiwa yang terus menerus (klik pengguna, sensor IoT, dll.) dan perlu memprosesnya dengan latensi sangat rendah secara real-time, Airflow bukanlah pilihan terbaik.
- Tugas Frekuensi Tinggi atau Banyak Tugas Singkat: Ini adalah kasus lain di mana Airflow mungkin tidak bekerja, atau setidaknya tidak efisien. Tugas-tugas Airflow memiliki beberapa overhead (dalam pelacakan database, dll.), jadi jika Anda perlu memicu sesuatu setiap beberapa detik atau memiliki ribuan tugas kecil, Airflow mungkin tidak akan skalabel dengan baik.
- Alur Kerja Murni Berbasis Peristiwa: Ini mirip dengan kasus penggunaan streaming, tetapi untuk sesuatu yang seharusnya dipicu oleh sebuah peristiwa. "Setiap kali peristiwa X terjadi, lakukan Y" adalah kasus penggunaan yang sepenuhnya valid untuk Airflow, tetapi jika satu-satunya hal yang seharusnya memicu itu adalah sebuah peristiwa (misalnya, "setiap kali sebuah file tiba di bucket S3, lakukan X"), maka Airflow bukanlah solusi yang paling ringan di sini. Airflow umumnya menggunakan sensor (misalnya S3KeySensor) untuk "merasakan" keberadaan file/peristiwa. Sensor memiliki kelemahan karena mereka bergantung pada polling. Masalah dengan sensor termasuk memicu pada file yang sudah ada dan tidak selalu responsif terhadap peristiwa (misalnya, mereka melakukan polling pada interval tertentu).
Singkatnya, Airflow cocok untuk alur kerja yang bersifat periodik, berbasis batch, atau kompleks untuk didefinisikan dan dikelola. Mungkin tidak cocok jika kasus penggunaan Anda memerlukan pemrosesan waktu nyata atau berkelanjutan, pekerjaan yang sangat sering, atau alur kerja yang sangat sederhana yang tidak membutuhkan beban Airflow. Jika demikian, Anda mungkin ingin mengeksplor opsi lain atau menyederhanakan solusi Anda.
Alternatif untuk Airflow
Ruang orkestrasi alur kerja telah berkembang pesat dalam beberapa tahun terakhir, dan meskipun Airflow adalah pemimpin, ada beberapa alat alternatif yang layak diketahui:
| Alat/Layanan | Ringkasan | Referensi |
|---|---|---|
| Luigi | Scheduler alur kerja Python sumber terbuka yang dibuat oleh Spotify. Bagus untuk membangun pipeline batch dengan tugas dan ketergantungan dalam kode. Arsitekturnya lebih sederhana dan lebih ringan dibandingkan Airflow, tetapi dengan ekosistem yang lebih kecil dan integrasi bawaan yang lebih sedikit. | Dokumentasi Luigi |
| Prefek | Kerangka orkestrasi asli Python yang ditempatkan sebagai alternatif yang lebih modern dan ramah pengembang dibandingkan Airflow. Menggunakan Flows dan Tasks, menawarkan penjadwalan, percobaan ulang, dan kemampuan observasi. Dapat dijalankan sepenuhnya open-source atau dengan Prefect Cloud untuk UI dan kontrol plane yang dihosting. | Situs web sempurna Dokumen Prefect |
| Dagster | Orkestrator data yang berfokus pada aset yang didefinisikan perangkat lunak dan jalur data yang sadar akan data. Menekankan keamanan tipe, pengujian, dan alur kerja pengembangan. Cocok untuk tim yang peduli tentang garis keturunan data, kualitas, dan praktik rekayasa modern. | Situs web Dagster Dokumentasi Dagster |
| Kedro | Framework Python untuk menyusun pipeline data dan ML yang dapat direproduksi dan dipelihara. Berfokus pada pembuatan kerangka proyek, pipeline modular, dan praktik terbaik. Sering digunakan bersama dengan orchestrator seperti Airflow daripada menggantikannya. | Situs web Kedro Dokumen Kedro |
| Argo Workflows | Mesin alur kerja native Kubernetes yang diimplementasikan sebagai CRD. Setiap langkah dijalankan dalam sebuah container, membuatnya ideal untuk pekerjaan batch cloud-native, CI/CD, dan pipeline ML di lingkungan yang banyak menggunakan Kubernetes. | Situs web Argo Workflows |
| Mage AI | Alat pipeline data modern untuk membangun, menjalankan, dan mengelola pipeline ETL, streaming, dan ML dengan antarmuka visual gaya notebook. Fokus pada pengalaman pengembang dan iterasi cepat. | Situs web Mage AI |
| Kestra | Platform orkestrasi sumber terbuka yang digerakkan oleh peristiwa menggunakan alur kerja berbasis YAML deklaratif. Dirancang untuk orkestrasi data dan proses yang dapat diskalakan, dijadwalkan, dan digerakkan oleh peristiwa dengan ekosistem plugin yang kuat. | Situs web Kestra Dokumen Kestra |
Airflow bukan satu-satunya pilihan yang tersedia, dan pilihan terbaik bergantung pada kasus penggunaan Anda. Luigi, Prefect, dan Dagster biasanya disebut sebagai opsi open-source utama lainnya di ruang yang sama (orchestrator alur kerja berbasis Python). Jika Anda merasa UI Airflow yang kuno atau keterbatasan lainnya merepotkan, Anda harus mempertimbangkan untuk mengevaluasi ini. Prefect berupaya menjadi Airflow yang "lebih baik" atau "lebih sederhana," Dagster mencoba menjadi orchestrator yang lebih "terstruktur" dengan penekanan pada aset data, dan Luigi adalah pendahulu Airflow yang lebih sederhana. Di sisi lain, jika kasus penggunaan Anda berbeda secara signifikan (seperti streaming real-time atau sepenuhnya berbasis cloud), Anda mungkin tidak menggunakan Airflow sama sekali dan bisa langsung mempertimbangkan platform streaming atau layanan orkestrasi yang dikelola.
Pikiran Akhir
Apache Airflow adalah platform sumber terbuka untuk mengorkestrasi alur kerja komputasi yang kompleks dan jalur pemrosesan data. Awalnya dikembangkan di Airbnb, platform ini telah mendapatkan popularitas yang signifikan di komunitas rekayasa data dan pembelajaran mesin. Komponen Airflow meliputi penjadwal (scheduler), eksekutor (executor), pekerja (workers), basis data metadata, dan antarmuka web (UI). Hal ini memungkinkan tim untuk dengan mudah menjalankan dan memelihara jalur ETL, MLOps, dan infrastruktur yang siap produksi. Abstraksi DAG (Directed Acyclic Graph) Airflow memungkinkan alur kerja tetap eksplisit, dapat diuji, dan dapat dipelihara seiring waktu. Ekosistem operator dan penyedia yang dibangun oleh komunitas juga menyederhanakan orkestrasi alur kerja yang bergantung pada teknologi atau alat apa pun.
Namun, ini bukan solusi yang cocok untuk semua situasi. Pendekatan ini paling efektif digunakan pada pipeline batch atau mikro-batch, dan pengguna harus nyaman menggunakan Python. Untuk alur kerja streaming atau frekuensi tinggi, ada solusi lain yang lebih cocok daripada Airflow. Bagi ilmuwan data atau tim yang lebih suka menulis pipeline secara deklaratif, alat alternatif selain Airflow mungkin layak dipertimbangkan.
Airflow masih terus dikembangkan secara aktif, dan fitur-fitur baru terus ditambahkan seiring waktu, seperti penjadwalan berbasis peristiwa, dataset, dan aset. Konsep dan praktik terbaik yang diperkenalkan dalam panduan ini seharusnya dapat membantu Anda, terlepas dari latar belakang Anda, untuk memahami bagaimana orkestrasi alur kerja bekerja dan kapan Airflow sebaiknya digunakan (atau tidak). Semoga ini dapat menjadi batu loncatan untuk menjelajahi lebih jauh alam semesta yang kaya ini.
Referensi
- Apache Airflow
- Apa itu Airflow?
- Apache Airflow: Kasus Penggunaan, Arsitektur, dan 6 Tips untuk Sukses
- Pengantar Pemula untuk Airflow dengan Docker — Pipeline Data di Cloud (I)
- 8 Alternatif untuk Airflow - Kasus Penggunaan
- Ikhtisar Arsitektur
- Penjadwal
Terima kasih telah belajar bersama Komunitas Linux-Console.net.




