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

Pipeline nedir? Hattı kur

What is a pipeline

Bu derste neler öğreneceksin

  • Pipeline kavramını tanımlar
  • Kestra yı Docker Compose ile çalıştırır
  • İlk YAML flow yazar

Pipeline Tanımı

Bir pipeline, verinin bir kaynaktan hedefe ulaşana kadar geçtiği adımlar dizisidir. Her adım bir görev (task), adımlar arası geçişler bağımlılık (dependency). Pipeline’ı bir DAG (Directed Acyclic Graph) olarak modelliyoruz — yönlü, döngüsüz.

Endüstriyel örnek: kullanıcı davranışı event’leri Kafka’dan gelir → dlt ile Postgres’e yazılır → dbt ile temizlenir → Metabase dashboard’a servis edilir. Her ok bir edge, her kutu bir node.

Kestra: YAML-First Orkestrasyon

Kestra (2022, Ludwig Music), Airflow’un Python decorator ağırlığına alternatif olarak çıktı. Temel fark: flow tanımı deklaratif YAML, execution ise plugin. Hata ayıklamak için Python trace’e girmek gerekmez, her execution’ın log’u UI’da kronolojik akar.

# docker-compose.yml
services:
  postgres:
    image: postgres:18-alpine
    environment:
      POSTGRES_PASSWORD: lemonade
    ports: ["5432:5432"]

  pgadmin:
    image: dpage/pgadmin4:latest
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@lemonade.io
      PGADMIN_DEFAULT_PASSWORD: admin
    ports: ["5050:80"]

  kestra:
    image: kestra/kestra:latest
    ports: ["8080:8080"]
    environment:
      KESTRA_DB_URL: jdbc:postgresql://postgres:5432/kestra

docker compose up -d → 3 servis ayağa kalkar. localhost:8080 Kestra UI, localhost:5050 pgAdmin, localhost:5432 Postgres.

İlk Production-Grade Flow

id: hello_production
namespace: prod
description: "İlk üretim flow'umuz"
labels:
  env: dev
  owner: senin-adin

inputs:
  - id: username
    type: STRING
    defaults: "engineer"

tasks:
  - id: log_greeting
    type: io.kestra.core.tasks.log.Log
    message: "Merhaba {{ inputs.username }}, Kestra çalışıyor."

  - id: query_postgres
    type: io.kestra.plugin.jdbc.postgresql.Query
    url: jdbc:postgresql://postgres:5432/kestra
    username: postgres
    password: lemonade
    sql: |
      SELECT NOW() AS sunucu_zamani,
             current_user AS aktif_kullanici;
    fetch: true

Kestra panelinde Execute with inputs ile username parametresi geçersin. İki task sırayla çalışır, ikincinin çıktısı UI’da görünür.

Neden Kestra Bu Kurs İçin?

  1. YAML-first — akış görsel olarak okunur, decorator/magic yok.
  2. 200+ plugin — Postgres, BigQuery, GCS, S3, Slack, HTTP, dbt, dlt hepsi native.
  3. Git sync — flow’lar GitHub’da durur, Kestra periyodik çeker (production standardı).
  4. Backfill UI — tarih aralığı seçip geriye dönük çalıştırmak 2 tık.

Airflow güçlü ama öğrenme eşiği dik (Python + DAG dosyaları + scheduler kavramı). Kestra ile başlayıp production’da Airflow’a geçmek, kursun amaçlarından biri.

Bugün Yaptık

  • Pipeline’ın endüstriyel tanımını ve DAG yapısını öğrendik
  • Kestra + Postgres 18 + pgAdmin üçlüsünü Docker Compose ile ayağa kaldırdık
  • İlk production-grade YAML flow yazdık (Log + Postgres query)

Ellerini Kirlet

  1. Yukarıdaki docker-compose.yml’i repo köküne kaydet, docker compose up -d çalıştır.
  2. Kestra paneline git, hello_production flow’unu ekle.
  3. query_postgres task’ına ikinci bir SQL ekle: SELECT version() — Postgres versiyonunu gör.
  4. Execution log’unda hata varsa: Postgres konteyneri hazır olmadan Kestra başlamış olabilir. docker compose restart kestra dene.

Sıradaki

Bir sonraki ders: ETL vs ELT — production kararı →