Merancang arsitektur pipeline data yang sehat: memahami perbedaan batch dan streaming, peran orchestration dengan Apache Airflow, pola pipeline yang terbukti, dan praktik mendesain pipeline untuk produksi

Setelah di episode 5 kita memilih platform cloud, sekarang kita membahas urat nadi arsitektur data: pipeline. Platform hanyalah wadah; pipeline-lah yang mengalirkan data dari sumber ke penyimpanan. Arsitektur pipeline menentukan seberapa cepat data tersedia, seberapa mudah debugging, dan seberapa besar biaya operasional harian.
Mengapa episode ini penting? Karena sebagian besar on-call data engineer dihabiskan untuk pipeline yang gagal di tengah malam. Arsitek yang merancang pipeline dengan pola yang benar — idempotent, observable, ter-orchestrasi — menyelamatkan timnya dari panggilan tengah malam dan laporan data yang salah.
Dua mode dasar pengolahan data:
| Dimensi | Batch | Streaming |
|---|---|---|
| Keterbaruan data | Jam/hari (scheduling) | Detik-menit (continuous) |
| Volume per proses | Besar, efisien | Kecil, terus-menerus |
| Kompleksitas | Rendah | Tinggi (state, exactly-once) |
| Biaya | Murah | Mahal |
| Cocok untuk | Laporan harian, backfill | Fraud detection, monitoring |
Aturan praktis yang sering dipakai: mulai dengan batch, tambahkan streaming hanya bila ada kebutuhan nyata. Streaming untuk kebutuhan "real-time" yang sebenarnya cukup harian adalah pemborosan yang sering terjadi.
butuh data hari ini untuk dashboard kemarin? → batch harian
butuh deteksi fraud dalam hitungan detik? → streaming
butuh keduanya? → kappa/lambda hybridPola yang paling umum di 2026 adalah ELT batch menuju lakehouse, dengan struktur berlapis:
Konsep medallion architecture (bronze → silver → gold) menciptakan pemisahan yang jelas: bronze menyimpan mentah (reproducibility), silver menyimpan bersih (consistency), gold menyimpan siap-pakai (performance). Kita bahas lebih dalam saat memilih skema di episode 16.
Batch pipeline tidak berjalan sendiri — butuh orchestrator. Apache Airflow adalah standar de facto: DAG (Directed Acyclic Graph) yang mendefinisikan alur tugas, dependencies, retry, dan alerting.
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta
default_args = {"retries": 3, "retry_delay": timedelta(minutes=5)}
with DAG(
"elt_daily",
default_args=default_args,
schedule="0 2 * * *",
catchup=False,
start_date=datetime(2026, 1, 1),
) as dag:
extract = BashOperator(task_id="extract", bash_command="bun run ingest")
transform = BashOperator(task_id="transform", bash_command="dbt run")
test = BashOperator(task_id="test", bash_command="dbt test")
extract >> transform >> testPoin penting untuk arsitek: orchestration ≠ transform. Airflow menjalankan kapan dan urutan; dbt/Spark mengerjakan apa yang dilakukan pada data. Memisahkan keduanya membuat pipeline mudah diuji dan dimodifikasi.
Note
Prinsip penting: orchestrator harus menunggu data siap, bukan menebak. Memakai sensor (misal menunggu file muncul di S3) lebih andal daripada hardcode waktu. Pipeline yang mulai tanpa data siap menghasilkan data kosong yang terlihat valid — jenis bug paling berbahaya.
Menjalankan pipeline dua kali harus menghasilkan hasil yang sama. Implementasi: tabel dengan partition yang bisa di-replace, dedup, atau merge bersyarat. Di dbt, pola incremental dengan is_incremental() menjaga pipeline bisa di-run ulang tanpa duplikasi.
Data mentah tidak pernah diupdate in-place — selalu tambahkan partisi baru. Ini memungkinkan re-proses penuh dan audit.
Pipeline harus bisa di-backfill dari nol (misal re-proses 6 bulan) dengan satu command. Jika tidak, kalian tidak akan berani mengubah transformasi apa pun.
Setiap kegagalan harus menghasilkan alert — bukan berakhir di log yang tidak dibaca. retries: 3 di Airflow harus disertai on_failure_callback yang mengirim ke Slack/email.
Ukur durasi, row count, dan kualitas di setiap tahap. Kita bahas detail di episode 9 (data observability).
Kita desain pipeline untuk skenario: sinkronisasi order dari aplikasi (PostgreSQL) ke lakehouse, transformasi harian, dan notifikasi:
1. Ingestion (tiap 15 menit): baca baris baru dari PostgreSQL via CDC/log-based
→ tulis ke bronze di lakehouse (partition per tanggal)
2. Transformasi (setiap jam): dbt memproses bronze → silver
→ normalize, dedup, cast tipe data
3. Modeling (setiap jam): dbt silver → gold star schema
→ fact_sales, dim_customer, dim_product
4. Testing (setiap selesai): dbt test + data quality checks
→ warn jika row count menyimpang >5% dari rata-rata 30 hari
5. Alerting: gagal 3x → Slack #data-pipelineLangkah evaluasi desain:
Tip
Uji pipeline dengan backfill seluruh periode sebelum ditandai production-ready. Pipeline yang lulus backfill 3 bulan tanpa duplikasi adalah pipeline yang bisa tidur nyenyak. Yang tidak bisa backfill adalah bom waktu.
Inti yang harus dibawa pulang:
Di episode 7 selanjutnya kita akan membahas Streaming & Event-Driven Data — Apache Kafka, Change Data Capture (CDC), dan arsitektur real-time yang benar-benar dibutuhkan organisasi. Sampai jumpa di episode 7!