Apache Airflow Açıklandı: Yeni Başlayanlar İçin Rehber


Giriş

Modern veri odaklı şirketlerin tamamı, bilgiyi bir yerden başka bir yere almak, dönüştürmek, zenginleştirmek ve taşımak için veri boru hatlarına güvenir. Bu veri boru hatları birçok adımı içerebilir (ham veriyi çıkarmak, temizlemek, makine öğrenimi modelleri eğitmek, gösterge tabloları oluşturmak vb.). Ayrıca, bu adımlar çok belirli bir sırayla çalıştırılmalıdır. Apache Airflow gibi iş akışı orkestrasyon araçları, tüm bu adımların doğru zamanda ve doğru sırayla çalışmasını sağlamaya yardımcı olur. Ayrıca, boru hatlarını izlemeyi ve yönetmeyi kolaylaştırır.

Airflow, 2014 yılında Airbnb'de geliştirildi ve en popüler açık kaynaklı iş akışı düzenleme platformlarından biri haline geldi. Binlerce kuruluş tarafından toplu veri akışlarını otomatikleştirmek ve izlemek için kullanılıyor. Bu makalede, Apache Airflow’u temelinden itibaren açıklıyoruz. Ele alacağımız konular şunları içeriyor:

  • Airflow'un ne olduğu, ne yaptığı ve veri ekiplerinin neden kullandığı.
  • Airflow'un temel kavramları ve bileşenleri ve bunların nasıl bir araya geldiği.
  • Boruhattıların Yönlendirilmiş Döngü Olmayan Grafikler (DAG) olarak nasıl tanımlandığı ve basit bir DAG'in çalışma şeklinin anlatımı.
  • ETL/ELT, MLOps ve benzeri yaygın kullanım durumları.

Bunun, iş akışı orkestrasyonuna yeni başlayan mühendisler, öğrenciler ve ekipler için, uygulamalı ve örneklerle desteklenmiş bir Apache Airflow tanıtımı olmasını umuyoruz.

Önemli Noktalar

  • Apache Airflow, Python tabanlı bir iş akışı düzenleme platformudur ve DAG’ler (Yönlendirilmiş Döngüsüz Grafikler) kullanarak karmaşık veri boru hatlarını yönetir, zamanlar ve izler.
  • DAG'lar görevleri ve bağımlılıklarını tanımlar, böylece Airflow, her adımı doğru sırayla, yerleşik yeniden deneme, günlük kaydı ve izlenebilirlik ile yürütebilir.
  • Airflow'un mimarisi (Zamanlayıcı, Yürütücü, İşçi, Metadata DB, Web UI) boru hatlarının ölçeklenebilir, dağıtılmış yürütülmesini ve gerçek zamanlı izlenmesini sağlar.
  • Airflow, ETL/ELT işleri, ML eğitim süreçleri, veri kalite kontrolleri ve planlanmış analizler gibi toplu iş akışlarında başarılıdır — ancak gerçek zamanlı veya ultra yüksek frekanslı işler için ideal değildir.
  • Prefect, Dagster, Luigi, Argo Workflows ve Mage AI gibi alternatifler, etkinlik odaklı iş akışları, Kubernetes yerel çalıştırma veya modern geliştirici dostu arayüzler gibi ihtiyaçlara bağlı olarak daha uygun olabilir.

Apache Airflow Nedir?

Apache Airflow, iş akışlarını oluşturma, zamanlama ve izleme için açık kaynaklı bir sistemdir. Bir Airflow iş akışı, DAG (yönlendirilmiş döngüsüz grafik) olarak adlandırılır ve bu, açıkça tanımlanmış ilişkileri (bağımlılıkları) olan ve döngü içermeyen (bir görev kendini yukarıda tekrar edemez) bir dizi görevden oluşur. Airflow’un temel felsefesi "kod olarak yapılandırma"dır; bu nedenle sürükle-bırak arayüzüne sahip bir kullanıcı arayüzü yerine iş akışlarını temsil eden Python betikleri yazarsınız. Bu yaklaşım mühendisler için önemli esneklik sağlar: Airflow’un operatörleri ve Python kütüphaneleri aracılığıyla neredeyse her teknolojiye bağlanabilirsiniz. Ayrıca, yazılım mühendisliği en iyi uygulamalarını (sürüm kontrolü, test vb.) boru hattı tanımlarınıza uygulayabilirsiniz.

İş akışı düzenlemesi neden önemlidir?

Önemli nokta, genellikle herhangi bir veri iş akışında bir dizi adımın sırayla yürütülmesi gerektiğidir. Basit bir örnek ETL (Extract/Transform/Load - Çıkart/Dönüştür/Yükle) boru hattıdır. Daha fazla görev, bağımlılık, dallanma vb. ekledikçe boru hatları hızla daha karmaşık hale gelebilir ve ayrıca düzenli aralıklarla çalıştırılmaları gerekebilir. Manuel müdahale veya basit zamanlayıcı araçları bu durumlarda genellikle yetersiz kalır. Airflow, merkezi bir orkestratör olarak bu sorunu çözer. Bağımlılıkları (kenarlar) olan görevlerden (düğümler) oluşan yönlendirilmiş döngüsüz bir grafiğe (DAG) sahiptir. Hangi görevin ne zaman yürütüleceğini bilir (çalıştırmadan önce üst bağımlılıkların tamamlanmasını bekleyerek), planlamayı (periyodik aralıklarla çalıştırma), hata yönetimini (otomatik yeniden denemeler, uyarılar) ve günlüklemeyi içerir.

Eğer tüm veri akışını bir tarif olarak düşünürsek, her bir bireysel görev bir alt adım gibidir (doğrama, haşlama, tabağa koyma vb.). Airflow, tarifleri bilen ve her mutfakta gerçekleşen farklı alt adımları gözlemleyen, her şeyin doğru sırayla ve doğru zamanda gerçekleşmesini sağlayan mutfak yöneticisi gibidir.

İş akışı düzenlemesi olmadan, tüm şefleriniz ve malzemeleriniz olabilir ama bunlar koordine edilmemiş olur. Airflow bu koordinasyonu sağlar ve istenen “yemeğin” (iş akışı çalıştırması) üretilmesine olanak tanır.

Veri Takımları Neden Airflow Kullanır?

Airflow, karmaşık veri boru hatlarının birçok ihtiyacını karşılaması nedeniyle veri mühendisleri, ML mühendisleri ve DevOps ekipleri arasında popüler hale gelmiştir. İşte ekiplerin Airflow'u tercih etmesinin birkaç büyük nedeni:

  • Karmaşık İş Akışlarını ve Bağımlılıkları Düzenleme: Airflow, çok sayıda birbirine bağlı adımı olan iş akışları için tasarlanmıştır. Airflow, yukarı ve aşağı yöndeki gereksinimleri kolayca belirtmeyi sağlar ve görevlerin doğru sırayla çalışmasını temin eder. Eğer C görevi A ve B görevlerine bağlıysa, Airflow zamanlayıcısı bu ilişkilerin farkındadır ve C'yi çalıştırmadan önce A ve B'nin (potansiyel olarak paralel) çalışmasını sağlar. Airflow, karmaşık bağımlılıklarla, dallanma mantığıyla vb. başa çıkabilir.
  • Merkezi Zamanlama (Gelişmiş Cron): Size belirli bir program doğrultusunda görevleri çalıştırmanıza olanak tanıyan bir zamanlayıcı sağlar. Airflow'un zamanlayıcısını kullanarak, farklı zamanlarda (saatlik, günlük, aylık) görevleri tetikleyen onlarca veya yüzlerce boru hattı tanımlayabilirsiniz. Airflow, görevler arasındaki ilişkileri anlar. Görevleri çalıştırmak için zekice planlama ve tetikleme yapabilir. Merkezi zamanlayıcı, farklı sunucularda farklı betikler yazma zorunluluğundan sizi kurtarır.

  • Ölçeklenebilirlik ve Dağıtık Yürütme: Airflow, iş akışlarınızla birlikte ölçeklenebilir. Görevleri birden fazla işçi süreci veya makine arasında paralel olarak çalışacak şekilde yapılandırılabilir. Ayrıca, bir küme düğümleri üzerinde Celery veya Kubernetes gibi dağıtık sistemlerde görevleri çalıştırabilen birden fazla yürütücü (bu makalede daha sonra tartışılacaktır) sunar. Bu, yoğun görevleri (büyük veri işleme) paralelleştirmenize ve birden fazla pipeline'ı aynı anda çalıştırmanıza olanak tanır.
  • İzleme, Kayıt Tutma ve Uyarı: İş akışlarınız üzerinde gerçek zamanlı görünürlük sağlayan zengin bir web arayüzü ile birlikte gelir. Hangi görevlerin başarılı olduğunu ve hangilerinin başarısız olduğunu görebilir, her görev için log çıktısını inceleyebilirsiniz. Web arayüzü üzerinden görevleri manuel olarak tetikleyebilir ve/veya yeniden deneyebilirsiniz.

Airflow'un Temel Bileşenleri

Aşağıda Apache Airflow’un temel yapı taşlarına dair kısa bir genel bakış bulunmaktadır. Her bir bileşenin ne olduğunu ve ne işe yaradığını hızlıca anlamak için bu tabloyu referans olarak kullanabilirsiniz.

BileşenNedirTemel sorumluluklar
DAG'lar (Yönlendirilmiş Döngüsüz Grafikler)İş akışı planı Python ile yazılmıştır; bağımlılıkları olan ve döngü içermeyen görevlerin bir grafiğidir.Hangi görevlerin çalışacağını ve hangi sırayla çalışacağını tanımlar; zaman çizelgesini ve metadata'yı kodlar; kullanıcı arayüzünde görselleştirmeyi sağlar.
GörevlerÇalışmanın en küçük birimi (DAG grafındaki düğüm), operatörlerden veya TaskFlow işlevlerinden türetilir.Belirli bir eylemi gerçekleştirir (örneğin SQL çalıştırmak, Python çağırmak, API tetiklemek, dosyaları taşımak); başarı/başarısızlık durumunu bildirir.
ZamanlayıcıDAG'leri ve görev durumlarını sürekli olarak değerlendiren kalıcı bir hizmet.Her bir görevin ne zaman çalışacağını planlara ve bağımlılıklara göre belirler; görev örnekleri oluşturur; yeniden denemeleri ve geriye dönük çalışmaları yönetir.
Yönetici (ve İşçiler)Görevleri gerçekten çalıştıran yürütme altyapısı ve süreçler.Seçilen altyapıda (yerel süreç/iş parçacığı, Celery çalışanları, Kubernetes pod'ları) görev örneklerini başlatır; sonuçları Zamanlayıcıya döndürür.
Web Sunucusu (Web Arayüzü)Airflow'un web sunucusu tarafından sağlanan operasyonel kullanıcı arayüzü.Gözlemlenebilirlik ve kontrol: DAG'leri görüntüleme, görevleri tetikleme/temizleme, logları inceleme, DAG'leri duraklatma, bağlantıları/değişkenleri yönetme.
Meta Veri VeritabanıKalıcı kayıt sistemi (genellikle PostgreSQL/MySQL).DAG çalıştırmalarını, görev örneklerini ve durumlarını, yapılandırmaları, günlük meta verilerini ve operasyonel geçmişi depolar.

Airflow Nasıl Çalışır (Mimari)

İşte Airflow'un bir iş akışını (DAG) nasıl işlediğine dair adım adım bir genel bakış:

  • DAG Oluşturma: DAG yazarı, bir DAG tanımlayan bir Python betiği yazar. Bu betik, zamanlama (örneğin, “her gün saat 9'da çalıştır”) veya manuel tetikleme ayarları gibi şeyleri içerir. Ayrıca, görevlerin tanımları (operatörler veya @task fonksiyonları aracılığıyla) ve görev bağımlılıkları (örneğin, task1 >> task2 (task2, task1'in bitmesini bekler)) bu betikte yer alır. Python dosyası, Airflow tarafından bulunabilmesi için Airflow'un DAGs klasöründe kaydedilir. Airflow, DAG tanımını yüklemek için bu dosyayı periyodik olarak okur (parçalar).
  • Zamanlama ve DAG Ayrıştırma: Airflow Scheduler, arka planda sürekli çalışan bir süreçtir. Her DAG’in, zamanlamasına veya tetikleyicilerine göre çalıştırılıp çalıştırılmayacağını kontrol eder. Örneğin, zamanlaması "günlük" olan bir DAG, görev zamanlayıcı tarafından seçilebilir ve yeni bir çalıştırmanın gece yarısı planlanması gerektiğini fark edebilir. Airflow Scheduler ayrıca DAG içindeki görevlerin çalışmaya hazır olup olmadığını da kontrol eder – bu, tüm üst bağımlılıkların tamamlandığı ve planlanan zamanlarının (mantıksal tarih) geldiği anlamına gelir.
  • Görevleri Yürütme: Yürütülecek her görev, Zamanlayıcıdan Yürütücüye aktarılır. Yürütücü, görevi nerede ve nasıl çalıştıracağına karar verir. Görev yerel olarak çalıştırılabilir veya bir işçi kuyruğuna gönderilebilir. Dağıtık bir mimaride, görev bir kuyruğa eklenir ve ardından görevleri yürüten İşçi süreçleri tarafından seçilir.
  • Durum Güncelleme ve Hata Yönetimi: Her görev örneği, tamamlandıkça durumunu (başarılı, başarısız vb.) geri planlayıcıya bildirir ve planlayıcı, görev durumuyla ilgili meta veri tabanını günceller.
    Durum takibi, planlayıcının bir sonraki ne yapacağını bilmesini sağlar – örneğin, Görev A başarılı bir şekilde tamamlandıysa, planlayıcı şimdi Görev B’yi planlayabileceğini bilir; veya Görev A başarısız olduysa ve tekrar deneme hakkı varsa, yeniden deneme planlar; ya da tekrar deneme hakkı kalmadıysa, DAG çalışmasını başarısız olarak işaretler. Bir görev başarısız olursa, Airflow, tekrar deneme yapılandırılmışsa görevi otomatik olarak yeniden deneme mantığına sahiptir. Yeniden denemelerden sonra da başarısız olmaya devam ederse, Airflow başarısızlıklar hakkında bildirim gönderebilir (e-posta veya Slack mesajı vb.). Tüm bunlar, DAG veya görev parametrelerinin bir parçası olarak yapılandırılabilir (örneğin, tekrar sayısı, yeniden deneme gecikmesi, uyarı durumunda gönderilecek e-posta).
  • İzleme ve Müdahale: Airflow Web UI, yukarıdaki sürecin canlı bir arayüzünü sağlar. Bir DAG çalışmasının göründüğünü görebilirsiniz (örneğin, bugün yapılan bir çalışmanın Tree görünümünde yeni bir satır) ve görev durumlarının ilerledikçe nasıl değiştiğini izleyebilirsiniz. Graph görünümü, DAG’ın görevlerini görselleştirir ve hangilerinin tamamlandığını veya hata verdiğini gösterir.
  • Temizlik ve Sonraki Çalıştırma: Bir DAG çalıştırması tamamlandığında (tüm görevler başarılı şekilde tamamlanmış veya atlanmış/hata vermişse), Airflow bir sonraki planlanan çalıştırmaya geçer. Geçmiş çalıştırmalara ait tüm meta veriler hâlâ veritabanında tutulur ve geçmişi her zaman kontrol edebilirsiniz. Zamanlayıcı, plan veya manuel tetiklemeye göre yeni çalıştırmaları tetiklemeye devam eder. Bu süreç, Airflow işlemi sonlandırılana kadar tekrarlanır.

Airflow'da DAG'leri Anlamak

Airflow'da bir DAG, bir iş akışını yürütmek için gerekli olan zamanlamayı, görevleri ve bağımlılıkları tanımlar. Bir DAG'ın her görevin içinde ne olduğunu bilmesi gerekmez; sadece ne zaman ve hangi sırayla çalışmaları gerektiğini tanımlaması yeterlidir.

Görevler, operatörler ve sensörler

Görevler, Airflow'daki temel çalışma birimleridir. Airflow'da görevler, önceden tanımlanmış eylemler için şablonlar olan operatörlerin örnekleridir. Airflow, çeşitli temel operatörlerle birlikte gelir. BashOperator, size kabuk komutlarını çalıştırma imkânı verir ve PythonOperator, Python fonksiyonlarını çağırmanıza olanak sağlar. Airflow ayrıca, normal bir Python fonksiyonunu görev haline getirmenizi sağlayan @task dekoratörünü de sunar.

Operatorlara ek olarak, Airflow sensörler de sağlar. Sensörler, bir koşulun veya olayın gerçekleşmesini bekleyen görevlerdir ve başarılı olmadan önce bu koşulun yerine gelmesini beklerler. Bir dosyanın ortaya çıkmasını veya bir tablonun doldurulmasını beklemek gibi durumlar için kullanılabilirler.

Görev bağımlılıkları

Görevler arasında bağımlılıkları belirtmek için >> ve << operatörlerini (önerilen) veya set_upstream ve set_downstream gibi yöntemleri kullanabilirsiniz. Ayrıca görevleri zincirlemek, çapraz alt-bağımlılıklar oluşturmak ve hatta görev listelerini dinamik olarak oluşturmak da mümkündür. Hiçbir bağımlılığı olmayan bir DAG sadece bağımsız bir görev seti olur.

DAG tasarımı için en iyi uygulamalar

Aşağıdaki tablo, DAG tasarlarken akılda tutulması gereken bazı yönergeleri sunmaktadır.

En İyi UygulamaAçıklamaPratik İpuçları/Örnekler
DAG'lerin gerçekten döngüsüz olduğundan emin olunDAG'ler döngü içermemelidir. Karmaşık iş akışlarında, dolaylı döngüler (örneğin, A → B → C → A) oluşturmak kolaydır. Airflow döngüleri otomatik olarak tespit eder ve bu tür DAG'leri çalıştırmayı reddeder.Bağımlılıkları düzenli olarak gözden geçirin. DAG’de döngü olmadığını görsel olarak doğrulamak için Grafik Görünümünü kullanın. Kazara döngüleri önlemek için karmaşık DAG’leri yeniden yapılandırın.
Görevleri değiştirilemez ve küçük tutunHer görev tek bir mantıksal adımı yerine getirmeli ve verileri bozmadan tekrar çalıştırılabilir olmalıdır. Tekrar çalıştırılabilir (idempotent) görevler, denemelerin tutarsız sonuçlar üretmemesini sağlar.“Ekle veya değiştir” desenlerini kullanın. Sonuçları kaydetmeden önce geçici dosyalara yazın. Büyük betikleri birden fazla göreve bölün.
Açıklayıcı kimlikler ve belgeler kullanınAçık isimlendirme ve dokümantasyon, hem kodun hem de Airflow kullanıcı arayüzünün okunabilirliğini ve sürdürülebilirliğini artırır.Anlamlı DAG kimlikleri ve görev kimlikleri kullanın. dag.doc_md veya task.doc_md kullanarak belgeler ekleyin. İsimleri iş mantığıyla uyumlu hale getirin.
Airflow özelliklerinden yararlanınÖzel mantık yerine iletişim, kimlik bilgisi yönetimi ve boru hattı koordinasyonu için dahili Airflow özelliklerini kullanın.Küçük veri paylaşımları için XCom'ları kullanın. Konfigürasyon ve gizli bilgiler için Değişkenler ve Bağlantıları kullanın. Mümkün olduğunda yerleşik operatörleri ve kancaları kullanın.
DAG kodunu test edin ve sürüm kontrolünü yapınDAG'ler koddur ve uygun yazılım mühendisliği uygulamaları kullanılarak sürdürülmelidir: sürüm kontrolü, test ve CI/CD.DAG’leri Git’te saklayın. Özel operatörler ve mantık için testler yazın. Üretime dağıtmadan önce yerel/test ortamlarını kullanın.
Zamanlayıcıyı aşırı yüklemekten kaçınınDAG dosyalarında çok sayıda DAG veya ağır hesaplamalar planlayıcıyı yavaşlatabilir. DAG'ler çözümlemesi için hafif olmalıdır.Zamanlayıcı performansını izleyin. Büyük DAG'ları daha küçük parçalara ayırın. DAG içe aktarma sırasında API çağrılarından veya ağır işlemlerden kaçının.
Net bir hata yönetimi stratejisi belirleyinHataların nasıl ele alınacağını planlayın. Tüm hatalar yeniden denenmemelidir ve uzun süren görevler için SLA’lar veya uyarılar gerekebilir.Yalnızca geçici hatalar için yeniden denemeleri kullanın. Olay tabanlı bağımlılıklar için Sensörleri ve tetikleyicileri kullanın. Uzun veya kritik görevler için SLA'lar belirleyin.

Örnek: Basit Bir Airflow DAG

Kavramları en iyi pekiştiren şey örnektir. Basit bir Airflow DAG kodunu inceleyelim ve parçalarını açıklayalım. Bu örnek, art arda iki görevle küçük bir iş akışı oluşturacak:

from datetime import datetime
from airflow import DAG
from airflow.operators.bash import BashOperator

# Define the DAG and its schedule
with DAG(
    dag_id="example_dag",
    description="A simple example DAG",
    start_date=datetime(2025, 1, 1),
    schedule_interval="@daily",  # runs daily
    catchup=False
) as dag:
    # Task 1: Print current date
    task1 = BashOperator(
        task_id="print_date",
        bash_command="date"
    )
    # Task 2: Echo a message
    task2 = BashOperator(
        task_id="echo_hello",
        bash_command="echo 'Hello, Airflow!'"
    )
    # Define dependency: task1 must run before task2
    task1 >> task2

Burada neler olduğunu parçalara ayıralım:

  • Gerekli sınıfları içe aktarın: DAG (DAG'i tanımlamak için) ve BashOperator (görevlerde shell/bash komutlarını çalıştırmak için). Ayrıca DAG'in başlangıç tarihini belirtmek için datetime sınıfını da içe aktarıyoruz.
  • Bir DAG nesnesini bir bağlam yöneticisi ile oluşturuyoruz (with DAG(…) as dag:). DAG'a benzersiz bir ID "example_dag" verin (Airflow ortamında benzersiz olmalıdır), bir açıklama (isteğe bağlı, insanların okumasına yardımcı olur), bir start_date ve bir schedule_interval sağlayın. Burada, yerleşik bir schedule_interval preset (@daily) ve start_date=datetime(2025,1,1) ayarlıyoruz. Ayrıca, başlangıç tarihi ile bugünün arasındaki herhangi bir eksik çalışmayı önlemek için catchup=False olarak ayarladık (sadece bundan sonra günlük olarak çalışmasını istiyoruz). Bu tüm blok, Airflow'un farkında olacağı ve günün başında günlük olarak çalıştıracağı bir DAG oluşturur.
  • Daha sonra DAG bağlamında iki görev tanımlarız:
  • task1, bir bash komutunu (date) çalıştırmak için BashOperator kullanılarak tanımlanmıştır. task_id “print_date” ve bu görev, kullanıcı arayüzünde ve loglarda bu görevi tanımlamak için kullanılacaktır. Çalıştırıldığında, bu görev sadece geçerli tarih/saati (görevin loguna) yazdıracaktır.
  • task2 de task_id=“echo_hello”, ve command=echo ‘Hello, Airflow!’ ile bir BashOperator kullanır. Bu güzel bir mesaj yazdıracaktır. Şu anda bu görevler sadece tanımlanmış, henüz birbirine bağlanmamış.
  • Son satır (task1 >> task2) bir bağımlılığı (akışı) belirtir: task1, task2'ye akar. Bu, task1'in çalışıp başarıyla tamamlanmasının ardından task2'nin çalıştırılmak üzere planlanabileceği anlamına gelir. DAG grafiğinde, grafiksel olarak, task1'den task2'ye giden bir ok olacaktır.

Bu örnekte dikkat edilmesi gereken birkaç şey:

  • Sadeleklik için sadece BashOperator kullandık, ancak farklı türden operatörlerle bir DAG de kullanabilirdik. Bir Python fonksiyonunu çağırmak için bir PythonOperator veya bir API'yi kontrol etmek için bir SimpleHttpOperator kullanabilirdik ve benzeri.
  • "with DAG(…) as dag:" bağlam deseni, bir DAG örneği oluşturmak için yaygın bir deyimdir. İçinde oluşturulan tüm görevler otomatik olarak o DAG ile ilişkilendirilir.
  • catchup=False, geçmiş bir start_date’e sahip birçok DAG’da kullanılan bir parametredir ve tüm geçmiş tarihler için çalışmasını istemediğiniz durumlarda kullanılır. Eğer catchup=True (varsayılan) bırakmış olsaydık ve bugün 10 Ocak 2025 olsaydı, Airflow DAG’ı 1, 2, 3 Ocak … 10 Ocak’a kadar çalıştırmaya çalışır, bu kaçırılan günleri birikmiş şekilde tamamlamaya çalışırdı. Burada basitlik açısından bunu kapattık.
  • Bu örnek, BashOperator için göreli içe aktarma yolunu kullanır. Airflow 2'de birçok operatör airflow.providers altına taşındı. Bu örnek, bu sağlayıcıların yüklü olduğu varsayımıyla yazılmıştır (BashOperator, Airflow'un çekirdek yapısında bulunmaktadır).

Bu basit örnek kolayca genişletilebilir – ek görevler ekleyebilirsiniz (belki bir API çağrısı yapıp, sonra sonuçları bir veritabanına yükleyip, ardından bir bildirim gönderebilirsiniz). Ayrıca daha karmaşık mantıklar da ekleyebilirsiniz (örneğin dallanma – Airflow, BranchOperator kullanarak if/else tarzı dallanmayı destekler).

DAG’leriniz büyüdükçe, Airflow’un kullanıcı arayüzü ve loglama sistemi neler olduğunu anlamak için çok değerli hale gelir. Bu örnekte, print_date için olan log, yazdırılan sistem tarihini içerecek ve echo_hello için olan log ise "Hello, Airflow!" yazısını içerecektir. Eğer print_date başarısız olursa (belki tarih komutunu bulamıyor olabilir, varsayımsal bir senaryoda), echo_hello asla çalıştırılmaz (bağımlılık nedeniyle) ve DAG çalıştırması başarısız olarak işaretlenir. Ardından logu inceleyebilir, problemi düzeltebilir ve bu görevi veya tüm DAG’i yeniden çalıştırabilirsiniz.

Airflow İçin Yaygın Kullanım Alanları

Aşağıda yaygın Apache Airflow kullanım durumlarının yapılandırılmış bir özeti bulunmaktadır. Tablo, her kullanım durumunun neleri içerdiğini ve Airflow'un bu bağlamda nasıl değer katığını vurgulamaktadır.

Kullanım DurumuAçıklama (Ne İçerir ve Tipik Adımlar)Airflow Nasıl Yardımcı Olur/Faydaları
ETL/ELT Veri Boru HatlarıVeri ambarı veya veri gölüne birden çok kaynaktan veri taşıma işlemi, ETL (Extract–Transform–Load) veya ELT modelleri kullanılarak yapılır.DAG'ler verileri doğru sırayla çıkarma → dönüştürme → yükleme süreçlerini düzenler. Airflow birçok veritabanı ve depolama sistemi ile entegre olur. Eğer bir adım başarısız olursa (örneğin, API kapalıysa), sonraki görevler durdurulur ve uyarılar tetiklenebilir; bu da toplu ve artımlı senkronizasyonların güvenilirliğini artırır.
Veri Ambarı ve BI RaporlamaGösterge tabloları ve raporlarda kullanılan analiz verilerini hazırlama ve güncelleme.Raporların her zaman güncel veriler üzerinde çalışmasını sağlamak için günlük veya periyodik işleri planlar. SQL iş yüklerini, kalite kontrollerini ve raporlama adımlarını koordine eder. Hataların (örneğin bozuk toplamalar) sessizce BI çıktısını bozmak yerine görünür olmasını sağlamak için izleme ve bildirim sağlar.
Makine Öğrenimi HatlarıVeri hazırlamadan dağıtıma kadar uçtan uca ML iş akışlarını otomatikleştirmek.Her ML aşamasını DAG'da bir görev olarak temsil eder ve doğru sıralamayı uygular. Adımlar arasında artefaktları (ön işlenmiş veriler, model ikili dosyaları) saklayabilir. ML çerçeveleri ve Kubernetes operatörleri ile entegre olur ve yoğun olmayan saatlerde planlı yeniden eğitim ve deney düzeneği yapılmasını sağlar.
Veri Kalitesi Kontrolleri ve DoğrulamaVerilerin eksiksiz, tutarlı ve güvenilir olduğunu sağlamak için otomatik kontroller çalıştırılıyor.Tekrarlayan veri kalite DAG'larını (günlük/haftalık) planlar. Veritabanları ve QA scriptleri arasında kontrolleri koordine eder, anormallikler konusunda ekipleri uyarır ve veri güvenilirliği mühendisliği kapsamında aşağı yönlü düzeltme görevlerini başlatabilir.
İşlemsel Veritabanı Bakımı ve YedeklemeleriÜretim veritabanları ve altyapısı için rutin operasyonel görevleri otomatikleştirmek.Bakım görevlerinin planlanmasını ve izlenmesini merkezi hale getirir. Yedeklemelerin ve temizlik işlemlerinin belirlenen zamanlarda düzenli olarak çalışmasını sağlar, manuel çabayı ve insan hatasını azaltır ve ekiplerin kritik bakım görevlerinin başarıyla tamamlandığını doğrulayabilmesi için loglar/geçmiş sağlar.
Entegrasyon/İş Akışı OtomasyonuBirden fazla hizmeti ve API'yi kapsayan iş veya sistem iş akışlarını düzenlemek.Hizmetleri birbirine bağlayan esnek bir “yapıştırıcı” katman işlevi görür. DAG’lar karmaşık dallanma ve koşullu mantığı kodlar. Operatörler ve Python görevleri özel entegrasyonları mümkün kılar. Otomasyon mantığını rastgele betikler ve araçlar üzerine dağıtmak yerine iş süreci adımlarını yönetmek, izlemek ve yeniden denemek için merkezi bir alan sağlar.

Airflow Kullanılmaması Gereken Durumlar

Airflow güçlü olmasına rağmen, her durum için doğru araç değildir. Sınırlamalarını anlamak, doğru orkestrasyon yaklaşımını seçmenize yardımcı olur:

  • Gerçek Zamanlı veya Akış İş Yükleri: Airflow, başı ve sonu net bir şekilde tanımlanmış, toplu iş odaklıdır. Uzun süreli, olay odaklı veya akış tabanlı iş yükleri için uygun değildir. Sürekli olay akışlarını (kullanıcı tıklamaları, IoT sensörleri vb.) alıyor ve bunları gerçek zamanlı olarak çok düşük gecikmeyle işlemeyi planlıyorsanız, Airflow en iyi seçenek değildir.
  • Yüksek Frekanslı veya Birçok Kısa Görev: Bu, Airflow'un çalışmayabileceği veya en azından verimli olmayabileceği bir başka durumdur. Airflow görevlerinin bazı ek yükleri vardır (veritabanı takibi vb.), bu yüzden eğer her birkaç saniyede bir bir şey tetiklemeniz gerekiyorsa veya binlerce küçük göreviniz varsa, Airflow iyi ölçeklenmeyebilir.
  • Saf Olay Tabanlı İş Akışları: Bu, akış kullanımı ile benzerdir, ancak bir olay tarafından tetiklenmesi gereken bir şey içindir. “Olay X gerçekleştiğinde, Y yap” ifadesi Airflow için tamamen geçerli bir kullanımdır, ancak bunu tetikleyecek tek şey bir olaysa (örneğin, “Bir dosya S3 kovasına geldiğinde, X yap”), Airflow burada en hafif çözüm değildir. Airflow genellikle dosya/olay varlığını “algılamak” için sensörler (örneğin S3KeySensor) kullanır. Sensörlerin, sürekli yoklama yapmaları nedeniyle bazı dezavantajları vardır. Sensörlerle ilgili sorunlar arasında mevcut dosyalar üzerinde tetiklenme ve olaylara her zaman duyarlı olmama (ör. belirli aralıklarla yoklama yapmaları) yer alır.

Kısacası, Airflow, periyodik, toplu iş odaklı veya tanımlaması ve yönetimi karmaşık olan iş akışları için uygundur. Ancak, kullanım durumunuz gerçek zamanlı veya sürekli işlem, çok sık tekrar eden işler ya da Airflow’un ek yükünü gerektirmeyen çok basit iş akışları gerektiriyorsa iyi bir seçim olmayabilir. Bu durumda başka seçenekleri araştırmak veya çözümünüzü basitleştirmek isteyebilirsiniz.

Airflow’a Alternatifler

İş akışı düzenleme alanı son yıllarda büyük bir hızla gelişti ve Airflow bir lider olmasına rağmen, bilinmesi gereken birkaç alternatif araç bulunmaktadır:

Araç/HizmetÖzetReferans
LuigiSpotify tarafından oluşturulmuş açık kaynaklı Python iş akışı zamanlayıcısı. Kodda görevler ve bağımlılıklarla toplu iş hatları oluşturmak için iyidir. Airflow'dan daha basit bir mimariye ve daha hafif bir yapıya sahip, ancak daha küçük bir ekosisteme ve daha az yerleşik entegrasyona sahiptir.Luigi belgeleri
PrefektPython tabanlı orkestrasyon çerçevesi, Airflow'a kıyasla daha modern ve geliştirici dostu bir alternatif olarak konumlandırılmıştır. Flows ve Tasks kullanır, zamanlama, yeniden deneme ve gözlemlenebilirlik sunar. Tamamen açık kaynak olarak çalıştırılabilir veya barındırılan UI ve kontrol düzlemi için Prefect Cloud ile kullanılabilir.Mükemmel web sitesi, Mükemmel dokümanlar
DagsterYazılım tanımlı varlıklar ve veri farkındalık pipeline'larına odaklanan veri orkestratörü. Tür güvenliği, test ve geliştirme iş akışlarını vurgular. Veri hattı, kalite ve modern mühendislik uygulamalarına önem veren ekipler için güçlü bir uyum sağlar.Dagster web sitesi Dagster belgeleri
KedroTekrarlanabilir, sürdürülebilir veri ve ML boru hatlarını yapılandırmak için Python çerçevesi. Proje iskeleti oluşturma, modüler boru hatları ve en iyi uygulamalara odaklanır. Genellikle Airflow gibi bir orkestratörün yerine değil, onunla birlikte kullanılır.Kedro web sitesi Kedro belgeleri
Argo İş AkışlarıCRD olarak uygulanmış Kubernetes'e özgü iş akışı motoru. Her adım bir konteyner içinde çalışır, bu da onu bulut tabanlı toplu işler, CI/CD ve Kubernetes ağırlıklı ortamlarda ML boru hatları için ideal kılar.Argo Workflows web sitesi
Mage AIETL, akış ve ML boru hatlarını not defteri tarzı görsel bir arayüzle oluşturmak, çalıştırmak ve yönetmek için modern bir veri boru hattı aracı. Odak noktası geliştirici deneyimi ve hızlı yineleme.Mage AI web sitesi
KestraDeklaratif YAML tabanlı iş akışlarını kullanan açık kaynaklı, olay odaklı orkestrasyon platformu. Ölçeklenebilir, planlı ve olay odaklı veri ve süreç orkestrasyonu için güçlü bir eklenti ekosistemi ile tasarlanmıştır.Kestra web sitesi Kestra belgeleri

Airflow tek seçenek değildir ve en iyi tercih kullanım senaryonuza bağlıdır. Luigi, Prefect ve Dagster genellikle aynı alandaki diğer açık kaynak seçenekler olarak listelenir (Python tabanlı iş akışı orkestratörleri). Eğer Airflow'un eski arayüzü veya diğer sınırlamaları sizin için zahmetliyse, bu seçenekleri değerlendirmeyi düşünebilirsiniz. Prefect, daha "iyi" veya daha "basit" bir Airflow olmaya çalışırken, Dagster veri varlıklarına vurgu yaparak daha "yapısal" bir orkestratör olmayı hedefler ve Luigi, Airflow'un daha basit bir öncüsüdür. Öte yandan, kullanım senaryonuz önemli ölçüde farklıysa (örneğin, gerçek zamanlı akış veya tamamen bulut tabanlı), Airflow'u hiç kullanmayabilir ve doğrudan akış platformları veya yönetilen orkestrasyon hizmetlerini düşünebilirsiniz.

Son Düşünceler

Apache Airflow, karmaşık hesaplama iş akışlarını ve veri işleme hatlarını düzenlemek için kullanılan açık kaynaklı bir platformdur. İlk olarak Airbnb’de geliştirilmiş olan bu platform, veri mühendisliği ve makine öğrenimi topluluklarında önemli bir popülerlik kazanmıştır. Airflow’un bileşenleri arasında bir zamanlayıcı, bir yürütücü, çalışanlar, bir meta veri tabanı ve web tabanlı bir kullanıcı arayüzü bulunur. Bu, ekiplerin üretim hazır ETL, MLOps ve altyapı hatlarını kolayca çalıştırmasını ve sürdürmesini sağlar. Airflow’un DAG (Yönlendirilmiş Döngüsüz Grafik) soyutlaması, iş akışlarını kullanıcıya açık, test edilebilir ve zamanla sürdürülebilir kılmayı mümkün kılar. Platformun, topluluk tarafından geliştirilmiş operatörler ve sağlayıcılar ekosistemi, herhangi bir teknoloji veya araca bağlı iş akışı düzenlemelerini de basitleştirir.

Ancak bu herkes için uygun bir çözüm değil. En iyi şekilde toplu veya mikro-toplu iş akışlarıyla çalışır ve kullanıcıların Python konusunda rahat olmaları gerekir. Akışkan veya yüksek frekanslı iş akışları için, Airflow'dan daha uygun başka çözümler vardır. Bildirimsel iş akışları yazmayı tercih eden veri bilimciler veya ekipler için, Airflow alternatif araçlarını değerlendirmek faydalı olabilir.

Airflow hâlâ aktif olarak geliştirilmektedir ve zaman içinde etkinlik odaklı planlama, veri setleri ve varlıklar gibi yeni özellikler eklenmektedir. Bu kılavuzda tanıtılan kavramlar ve en iyi uygulamalar, geçmişiniz ne olursa olsun, iş akışı düzenlemesinin nasıl çalıştığını ve Airflow'un ne zaman kullanılacağını (veya kullanılmaması gerektiğini) anlamanıza yardımcı olmalıdır. Umarız bu, bu zengin evreni daha fazla keşfetmek için bir başlangıç noktası olur.

Kaynaklar

  • Apache Airflow
  • Airflow nedir?
  • Apache Airflow: Kullanım Alanları, Mimari ve Başarı İçin 6 İpucu
  • Docker ile Airflow'a Başlangıç — Bulutta Veri Boru Hatları (I)
  • Airflow için 8 Alternatif - Kullanım Alanları
  • Mimari Genel Bakış
  • Zamanlayıcı

Linux-Console.net Topluluğu ile öğrenme sürecine katıldığınız için teşekkürler.