Review Apache Airflow

Tri Juhari
5 min readAug 9, 2021

--

Saat kita memutuskan menggunakan suatu tools, kadang kita bertanya tanya terkait tools yang kita pakai ini. Biasanya pertanyaan tersebut dimulai dengan

Bagaimana pendapat orang diluar sana terkait tools yang sedang kita pakai ?

Apa Kelebihan dan kekurangannya ?

Pertanyaannya tidak akan jauh dari pertanyaan seperti pertanyaan di atas.Dari pertanyaan pertanyaan tersebut kita mulai melakukan riset terkait tools yang akan kita gunakan.contohnya saja tentang apache Airflow ini. Kita akan memulainya dengan melakukan riset terkait Apache Airflow.

Bagaimana opini pengguna lainnya terkait Apache Airflow ?

Tentunya semua tools punya kelebihan dan kekurangannya, seperti Airflow meskipun framework yang populer untuk pemrosesan big data tentunya memiliki kekurangan yang perlu dihindari.

Kelebihan Apache Airflow

Dependency Management

Dependency management merepresentasikan alur data yang melalui sebuah pipeline data.Contoh kasus sederhananya Task A -> Task B -> Task C. Namun dalam real casenya tentunya tidak sesedarhana contoh diatas melainkan lebih kompleks, misalnya skenario Fan out : Task A -> [Task B -> Task C -> Task D] yang berjalan secara paralel kemudian Task E.

Di dalam Airflow Dependensi harian yang kompleks diatur berdasarkan code pada data pipeline yang ditulis hanya pada satu script atau pada database yang dapat menghandle waktu scheduling , menghitung jumlah running, dll. Namun hal ini perlu dikembangkan berdasarkan use casenya dan konsumsi waktunya. Salah satu fitur yang dimiliki Apache Airflow adalah menangani manajemen dependensi ini.Apache airflow dapat mengatur manajemen dependensi dengan baik misalnya dapat menangani flow data yang standar , percabangan yang kompleks menggunakan BranchPythonOperator , task retry, catchup runs, dll.

Template dan Macros

Apache Airflow didesain untuk dapat mengatur atau mengoperasikan penjadwalan task secara on time. menjalankan skrip code yang sama namun di rentang waktu yang berbeda.Dengan demikian ada opsi untuk menjalankan skrip template yang berisi nilai waktu yang sesuai pada waktu running di DAG. Misalnya:

from airflow import DAG 
from airflow.operators.mysql_operator import MySqlOperator
default_arg = {'owner': airflow, 'start_date':'2021-08-08'}
dag = DAG( 'simple-mysql-dag',default_args = default_arg,schedule_interval ='0 0 * * *')
mysql_task = MySqlOperator(dag= dag, mysql_conn_id ='mysql_default',task_id = 'mysql_task', sql = ~/sample_sql.sql
params = {'test_user_id': -99})

mysql_task

File sample_sql.sql

Use database;
DROP TABLE IF NOT EXISTS event_stats_staging:
CREATE TABLE event_stats_staging
AS SELECT data, user_id, SUM(spend_amt) total_spend_amt FROM event WHERE data = {{macros.ds}} AND user_id = {{ params.test_user_id}}
GROUP BY date, user_id;
INSERT INTO event_stats_staging(
date, user_id, total_spend_amt
)
SELECT date, user_id, total_spend_amt
FROM event_stats_staging;
DROP TABLE event_stat_staging;

Query diatas pada statement macros.ds akan diganti dengan waktu eksekusi ketika DAG running.Selain menggunakan fungsi macros, kkta juga dapat menggunakan parameter bawaan pada waktu prosesnya dengan menambahkan statement paramas pada task operator.

Operators

Apache Airflow memiliki banyak operators yang dapat digunakan ketika akan membuat pipeline.Misalnya kita akan mengerjakan projek yang berkaitan dengan apache airflow langkah penting yang perlu dilakukan yaitu mencari operators yang sesuai dengan projek yang akan kita kerjakan sebelum kita menerapkan sendiri.Jika kita memiliki use case yang unik kita dapat menuliskan operator kita sendiri berdasarkan BaseOperator atau operator yang memiliki kesamaan , jika yang dibutuhkan hanya perubahan tambahan pada operator yang ada.

UI dan Logs

Apache Airflow memiliki tampilan yang sangat modern, dimana kita dapat melihat status DAG, mengecek waktu runningnya, mengecek log, menjalankan ulang tasknya, dan masih banyak lagi.Secara default dapat diakses oleh siapapun yang memiliki akses ke server , namun kita juga dapat mengatur otentikasi tambahan jika diperlukan. Kemudia log juga dapat disinkronkan ke penyimpanan eksternal ,menyediakan kemudahan dalam memeriksa adanya error.

Berdasarkan Prinsip Fungsional

Apache airflow dirancang berdasarakan prinsip prinsip fungsional.Kuncinya adalah data yang immutable dan idempotence.

Data immutable konteksnya yaitu kemampuan yang dapat menyimpan raw data ,memprosesnya, dan menyimpan data yang diproses secara terpisah. Hal ini memberikan pilihan untuk dapat menjalankan kembali jika terjadinya eror. Idempotence merupakan proses dimana ketika kita memberikan suatu input outputnya akan selalu sama. Hal ini akan membuat proses menjadi mudah untuk diuji dan dijalankan kembali.

Dengan prinsip fungsional, flow data yang melalui data pipeline akan mentransformasikan setiap task dan memprosesnya menjadi output yang digunakan untuk proses berikutnya.Di akhir proses data pipeline akan dihasilkan raw data atau data mentah dan data yang telah ditransformasikan. Dengan konsep ini akan membantu kita dalam mengatur , menyelesaikan masalah dan backfill data. Backfill data merupakan proses dimana kita harus menjalankan ulang ( rerunning) data pipeline karena adanya beberapa perubahan misalnya karena business logic, adanya kode yang eror, dan lain-lain.

Open Source

Apache airflow merupakan proyek open source yang aktif dan dengan komunitas yang yang sangat besar. Hal ini menunjukan sebagian besar masalah yang nantinya akan terjadi atau hadapi dapat ditemukan jawabannya secara online.Kita dapat membaca dokumentasinya untuk memahami bagaimana cara kerjanya dan kitapun dapat ikut melakukan kontribusi ke dalam proyek apache airflow ini.

Kekurangan Apache Airflow

Pemrosesan Data Yang Tidak Intuitif Untuk Pengguna Baru

Banyak pengguna baru yang kesusahan dalam memahami cara kerja Airflow. Biasanya masalah yang sering dihadapi yaitu dalam menuliskan test case. Dalam menulis sebuah test case sangat sulit dilakukan ketika menangani raw data pada data pipeline. Ada beberapa solusi yang dapat dilakukan pada masalah ini misalnya greatexpectations.Masalah lainnya seperti dalam menuliskan idempotent task yang mana ketika gagal dan mencoba ulang akan mengakibatkan data yang duplikat atau daya yang berantakan atau gagal.

Mengubah Interval Schedule Perlu Mengganti Nama DAG

Jika kita ingin mengubah jadwal (schedule), maka kita perlu mengganti nama DAGnya alasannya karena proses pada task sebelumnya tidak akan sesuai atau sejajar dengan interval baru.

CI /CD Yang Lumayan Rumit

Jika kita melakukan deploying Airflow pada docker container, dan jika proses CI / CD ini melakukan restart pada docker container akan mematikan semua proses yang sedang berjalan. Kita perlu mengatur waktu deploy agar sesuai dengan waktu tanpa aktivitas atau waktu saat menjalankan DAG sehingga akan baik-baik saja saat terjadi restarting atau restarting sebagian. Pada pendekatan ini akan baik baik saja jika kita memiliki beberapa DAG, namun jika jumlah DAGnya itu banyak, disarankan untuk menggunakan sinkronisasi git-sync atau S3, dimana file DAGnya akan disinkronkan ke penyimpanan eksternal dan pada proses deployingnya pada dasarnya akan melakukan sinkronisasi file dag tersebut ke dalam docker container.

Tidak didukung oleh Windows Native

Tidak mudah untuk melakukan running Airflow secara native di windows. namun masalah ini dapat diatas ketika menggunakan Docker.

Kesimpulan

Terlepas dari kekuranga dan kelebihan yang dimiliki oleh Apache Airflow, Apache Airflow masih menyediakan Framework pemrosesan data secara batch yang sangat baik ketika melakukan proses ETL. Ada banyak perusahaan yang menggunakan Airflow berdasarkan fungsi yang ditawarkan. Semoga tulisan ini dapat memeberikan gambaran tentang kelebihan dan kekurangan dari Apache Airflow.

--

--

No responses yet