Hızla gelişen veri mühendisliği ve DevOps dünyasında iş akışı orkestrasyonu, sağlam bir teknik yığının kritik bir bileşeni haline geldi. Apache Airflow ve Prefect gibi devler konuşmayı domine ederken, geliştirici odaklı tasarımı ve sadeliğiyle dikkat çeken yeni bir oyuncu var:
Kestra.
Kestra, geliştiricilerin iş akışlarını kod olarak tanımlamasına olanak tanıyan evrensel bir orkestrasyon ve zamanlama platformudur. Python veya Java'da karmaşık Yönlendirilmiş Döngüsüz Grafik (DAG) temsillerine heavily güvenen geleneksel araçların aksine, Kestra iş akışı tanımları için YAML kullanır. Bu yaklaşım, veri analistleri için erişilebilirlik ve yazılım mühendisleri için güç benzersiz bir şekilde birleştirir.
Neden Kestra Seçmelisiniz?
Kestra'nın temel ayırt edici özelliği, veri iş akışlarına uygulanan "altyapı olarak kod" felsefesidir. Tüm hattınızı tek bir YAML dosyasında tanımlayarak şu temel avantajlara ulaşırsınız:
1. **Sadelik ve Okunabilirlik**: YAML insan tarafından okunabilirdir. Karmaşık bir ETL işi bir bakışta anlaşılabilir olup, yeni personel alımı veya hata ayıklama sırasında bilişsel yükü azaltır.
2. **Yerel Entegrasyon**: Kestra; PostgreSQL, Kafka, Slack, S3 ve AWS dahil olmak üzere yüzlerce araca yerel olarak bağlanır, bu da özel iskelet kod yazma ihtiyacını azaltır.
3. **Yeniden Üretilebilirlik**: İş akışı bir kod olduğu için, diğer herhangi bir uygulama gibi sürüm kontrolüne tabi tutulabilir, test edilebilir ve CI/CD hatları aracılığıyla dağıtılabilir.
4. **Satıcı Kilidi Yok**: Kestra açık kaynaklıdır, bu da sizi yerel Docker kurulumlarından Kubernetes kümelere kadar herhangi bir altyapıda kendi kendine barındırma imkanı tanır.
Temel Kavramlar: Görevler ve Akışlar
Kestra'da her şey bir
Akış kavramı etrafında döner. Bir akış, belirli bir sırayla yürütülen görevler koleksiyonudur. Görevler, bir SQL sorgusu çalıştırmak, bir dosya kopyalamak veya bir API'yi tetiklemek gibi işin temel birimleridir.
Airflow'da görevleri Python'da tanımlayıp mantıksal operatörlerle birbirine bağlamanız gerektiğinin aksine, Kestra yürütme sırasını doğrudan YAML yapısı içinde tanımlamanıza olanak tanır. Bu bildirimsel yaklaşım hataları en aza indirger ve yürütme yolunu açık hale getirir.
İlk Adımlar: Pratik Bir Örnek
Pratik bir örneğe bakalım. CSV dosyasından veri ayıklamanız, bir SQL sorgusu kullanarak dönüştürmeniz ve sonucu bir PostgreSQL veritabanına yüklemeniz gereken basit bir ETL işini hayal edin.
Bunu Kestra'da şu şekilde tanımlarsınız:
id: simple_etl
namespace: com.example
tasks:
- id: extract
type: io.kestra.plugin.csv.Extract
resource: "s3://my-bucket/data/input.csv"
- id: transform
type: io.kestra.plugin.jdbc.postgresql.Query
sql: |
SELECT
customer_id,
SUM(order_amount) as total_spent
FROM raw_data
GROUP BY customer_id
- id: load
type: io.kestra.plugin.jdbc.postgresql.Insert
table: monthly_sales_summary
from: "{{ outputs.transform.outputs }}"
- id: notify
type: io.kestra.plugin.slack.SlackWebhook
title: "ETL Job Completed"
channel: "#data-alerts"
text: "Successfully loaded data into {{ flow.namespace }}.{{ flow.id }}"
Bu kod parçacığında:
-
extract görevi, S3 kovasından veri çeker.
-
transform görevi, PostgreSQL örneğiniz üzerinde bir SQL toplama sorgusu çalıştırır.
-
load görevi, dönüştürme görevinin çıktısını alır ve bunu bir özet tabloya ekler. Verinin görevler arasında sorunsuz bir şekilde aktarılması için şablon ifadelerinin (
{{ outputs.transform.outputs }}) kullanımına dikkat edin.
- Son olarak,
notify görevi, tamamlanma üzerine bir Slack bildirimi gönderir.
CI/CD ile Entegrasyon
Kestra'nın en güçlü özelliklerinden biri, mevcut CI/CD hatlarınızla entegre olabilmesidir. İş akışlarınız Git deposunda YAML dosyaları olarak saklandığından, değişiklikler itildiğinde dağıtımları otomatik olarak tetikleyebilirsiniz.
Örneğin, YAML sözdizimini doğrulamak ve akışı Kestra örneğinize dağıtmak için bir GitHub Action kullanabilirsiniz:
name: Deploy Kestra Flows
on:
push:
paths:
- 'kestra/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to Kestra
run: |
curl -X POST https://kestra.example.com/api/v1/executions/run \
-H "Authorization: Bearer ${{ secrets.KESTRA_TOKEN }}" \
-F "flowId=simple_etl" \
-F "namespace=com.example"
Sonuç
Kestra, daha basit ve şeffaf iş akışı orkestrasyonuna doğru bir değişimi temsil eder. Geleneksel DAG tabanlı araçlarla ilişkili karmaşılıktan bıkan ekipler için Kestra taze bir alternatiftir. Kod-öncelikli yaklaşımı, zengin bir eklenti ekosistemiyle birleştiğinde, modern veri mühendisliği ve DevOps uygulamaları için mükemmel bir seçimdir.
Basit bir ETL işini mi yoksa karmaşık çok bulutlu bir veri hattını mı orkestrasyon yapıyorsunuz, Kestra bunu verimli bir şekilde yönetmek için gereken esnekliği ve gücü sağlar. Docker kullanarak yerel bir örnek ayağa kaldırarak deneme şansını yakalayın ve iş akışı yönetim stratejinizin nasıl dönüştüğünü görün.