Modül 2 · İş Akışı Orkestrasyonu · ⏱ 7 dk

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:

  1. İlk deployment — pipeline bugün kuruldu, veri 6 aydır birikiyor. 180 günlük backfill şart.
  2. 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.
  3. 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ğumDilUIÖğrenme EşişiKullanım Alanı
AirflowAirbnb, 2014Python (DAG dosyaları)OrtaYüksekEndüstri standardı, büyük şirketler
Prefect2018Python (dekoratör)İyiOrtaCloud-first, modern UX
Dagster2018PythonİyiOrtaSoftware-engineered yaklaşım
LuigiSpotify, 2011PythonZayıfOrtaLegacy (miras) projeler
Kestra2022YAMLİyiDüşükYeni kurulumlar, küçük ekipler
Argo Workflows2018YAML (Kubernetes)İyiYüksekK8s-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

  1. nightly_orders flow’una schedule ekle, timezone: Europe/Istanbul koy.
  2. Manuel olarak Re-Execute → Backfill ile dün → bugün aralığını çalıştır.
  3. Kestra Execution listesinde status, duration, triggerId kolonlarını incele.
  4. README’ye bir tablo ekle: “Bu projede schedule’lar: …” — saatlik, günlük, haftalık, ayda bir.

Sıradaki

Bir sonraki ders: GitHub Actions ile CI/CD →