Zamanlayıcı, backfill ve orkestrasyon araçları
Scheduling and backfill
Bu derste neler öğreneceksin
- Kestra schedule tanımlar
- Backfill ne zaman gerekli açıklar
- Airflow Prefect Luigi Kestra farklarını bilir
Neden Schedule?
Manuel execution yalnızca debug içindir. Production’da her şey schedule’a bağlıdır: saatlik, günlük, haftalık. Yeni veri geldi mi diye birinin tetiklemesini beklemezsin — saat 03:00’te akış otomatik kalkar.
Kestra Cron
id: nightly_orders
namespace: prod
schedule:
cron: "0 3 * * *"
timezone: Europe/Istanbul
backfill:
start: 2026-01-01
tasks:
- id: load
type: io.kestra.plugin.gcp.bigquery.Load
from: gs://lemonade-raw/orders/{{ trigger.date | date('yyyy-MM-dd') }}.json
destinationTable: lemonade.raw.orders_{{ trigger.date | date('yyyyMMdd') }}
timezone: Europe/Istanbul → 03:00 Türkiye saatiyle. Yoksa UTC’de çalışır ve Türkiye’de 06:00 olur (kullanıcı uyanmış, dashboard hâlâ boş).
backfill.start → ilk deployment’tan itibaren schedule aktif olur. Dikkat: production’da bu anahtar production’da genelde kapatılır, sadece ilk kurulumda bir kerelik açılır. Çünkü schedule her restart’ta geçmişi tekrar çalıştırırsa faturası şişer.
Backfill: “Geçmiş İçin de Çalıştır”
Üç yaygın backfill senaryosu:
- İlk deployment — pipeline bugün kuruldu, veri 6 aydır birikiyor. 180 günlük backfill şart.
- Schema değişti — yeni sütun eklendi, geçmiş satırları da yeni sürümle yeniden işlemek istiyorsun. Tüm tarihleri backfill.
- Bug fix — dün gece bozuk çalıştı, o gün için tek seferlik backfill.
Kestra UI’da Executions → Re-Execute → Backfill, tarih aralığı seç, Kestra paralel çalıştırır (varsayılan 4 concurrent).
Orkestrasyon Araçları Karşılaştırması
| Araç | Doğum | Dil | UI | Öğrenme Eşişi | Kullanım Alanı |
|---|---|---|---|---|---|
| Airflow | Airbnb, 2014 | Python (DAG dosyaları) | Orta | Yüksek | Endüstri standardı, büyük şirketler |
| Prefect | 2018 | Python (dekoratör) | İyi | Orta | Cloud-first, modern UX |
| Dagster | 2018 | Python | İyi | Orta | Software-engineered yaklaşım |
| Luigi | Spotify, 2011 | Python | Zayıf | Orta | Legacy (miras) projeler |
| Kestra | 2022 | YAML | İyi | Düşük | Yeni kurulumlar, küçük ekipler |
| Argo Workflows | 2018 | YAML (Kubernetes) | İyi | Yüksek | K8s-native ortamlar |
Kural: Yeni projede Kestra veya Prefect ile başla, ölçeklendikçe Airflow’a geç. Bu kurs Kestra seçti çünkü öğretici — her satırı okuyabilirsin, decorator magic yok.
Airflow’a Hızlı Bakış (Gelecek İçin)
Aynı işi Airflow’da yapmak:
from airflow import DAG
from airflow.providers.google.cloud.transfers.gcs_to_bigquery import GCSToBigQueryOperator
from datetime import datetime
with DAG("nightly_orders", start_date=datetime(2026, 1, 1), schedule="0 3 * * *") as dag:
load = GCSToBigQueryOperator(
task_id="load",
bucket="lemonade-raw",
source_objects=["orders/{{ ds }}.json"],
destination_project_dataset_table="lemonade.raw.orders_{{ ds_nodash }}",
write_disposition="WRITE_TRUNCATE",
source_format="JSON",
)
Python bilen için güçlü ama öğretme maliyeti yüksek. Kestra YAML’ı gibi “neyi yaptığını bir bakışta göremiyorsun”.
Bugün Yaptık
- Kestra schedule + timezone + backfill konfigürasyonu öğrendik
- Üç backfill senaryosunu gördük
- Airflow / Prefect / Dagster / Kestra karşılaştırması yaptık
Ellerini Kirlet
nightly_ordersflow’una schedule ekle,timezone: Europe/Istanbulkoy.- Manuel olarak Re-Execute → Backfill ile dün → bugün aralığını çalıştır.
- Kestra Execution listesinde status, duration, triggerId kolonlarını incele.
- README’ye bir tablo ekle: “Bu projede schedule’lar: …” — saatlik, günlük, haftalık, ayda bir.