Apache Kafka ile Akış İşleme: Gerçek Zamanlı Veri Akışı Nasıl Kurulur?
Beceri rehberi

Apache Kafka ile Akış İşleme: Gerçek Zamanlı Veri Akışı Nasıl Kurulur?

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

Apache Kafka ile olay akışı kurmanın adımları: topic ve bölümleme, producer, consumer grupları, Kafka Streams, küme işletimi ve sık hatalar.

Apache Kafka nedir, hangi sorunu çözer?

Apache Kafka, olayların (kullanıcı tıklaması, sipariş, sensör okuması, ödeme gibi) sürekli aktığı sistemlerde bu olayları dayanıklı biçimde saklayan, dağıtan ve işleyen dağıtık bir olay akışı platformudur. Sistemlerin birbirine doğrudan bağlanmasının yarattığı karışıklığı çözer: üretici taraf olayı Kafka'ya yazar, ilgilenen herkes kendi hızında okur.

Bu ayrıştırma birkaç fayda sağlar. Üretici ile tüketici birbirinin hızından ve kesintisinden etkilenmez. Aynı olay akışını farklı sistemler (raporlama, arama dizini, bildirim servisi) bağımsız tüketir. Olaylar belirli süre saklandığından geçmişi yeniden okumak mümkündür. Kafka'yı sıradan bir mesaj kuyruğundan ayıran ana özellik de bu kalıcı ve yeniden okunabilir kayıt yapısıdır.

Temel kavramlar: topic, bölüm, producer, consumer

Kafka'yı öğrenirken beş kavram yeterlidir:

  • Topic: Olayların kategori ya da akış adıyla gruplandığı mantıksal kanal. Örneğin sipariş olayları için bir topic.
  • Bölüm (partition): Topic'in paralel işlenebilen ve sıralamanın korunduğu parçaları. Aynı anahtarlı olaylar aynı bölüme gider, bu sayede o anahtar için sıra korunur.
  • Producer: Topic'e olay yazan uygulama.
  • Consumer ve consumer grubu: Olayları okuyan uygulamalar. Aynı gruptaki tüketiciler bölümleri aralarında paylaşarak işi paralel yapar.
  • Broker ve küme: Veriyi saklayan sunucular ve bunların oluşturduğu kümedir; bölümler kopyalanarak kesintiye dayanıklılık sağlanır.

Bölüm sayısı ve anahtar seçimi, hem performansı hem sıralama garantisini belirlediği için tasarımın en kritik kararlarındandır.

Adım adım: ilk akıştan üretim düzenine

Kafka ile veri akışı kurarken şu sırayı izleyebilirsiniz:

  • Olayları tanımlayın: Hangi iş olayları akıtılacak, her olayın şeması ne? Alan adlarını ve sürüm değişikliği yöntemini baştan düşünün.
  • Topic ve bölümleme tasarlayın: Anahtarı sıralamanın gerektiği varlığa (örneğin sipariş numarası) göre seçin, bölüm sayısını beklenen paralellikle belirleyin.
  • Producer'ı yazın: Teslim garantisi ayarlarını (onay düzeyi, yeniden deneme, tekrarlı gönderim koruması) bilinçli seçin.
  • Consumer'ı yazın: Tüketim konumunun (offset) ne zaman işlendi sayılacağına karar verin; işlenmeden kaydetmek veri kaybı, işleyip kaydetmemek tekrar işleme riski yaratır.
  • Akış işleme ekleyin: Filtreleme, zenginleştirme, birleştirme ve pencere bazlı toplama için Kafka Streams gibi kütüphaneleri kullanın.
  • Dış sistemlere bağlayın: Veritabanı ve diğer hizmetlerle veri alışverişi için Kafka Connect kullanın.
  • İşletime alın: İzleme, güvenlik ve kapasite planı kurun.

Teslim garantileri ve tüketici tasarımı

Dağıtık sistemlerde ağ ve süreç hataları kaçınılmazdır; bu yüzden olayın kaç kez işlendiği bilinçli bir tasarım kararıdır. En az bir kez teslimde olay kaybolmaz ama tekrar edebilir; tam bir kez semantiği ise belirli koşullarda ek mekanizmalarla sağlanır.

Pratikte tüketici tarafını tekrar eden olaya dayanıklı yazmak (idempotent işleme) en sağlam yaklaşımlardan biridir: aynı sipariş olayı ikinci kez gelirse sonuç değişmemelidir. Bunun için olay kimliği kayıt altına alınır ya da işlem güncelleme mantığıyla tasarlanır.

Tüketici grubunda yeni bir üye katıldığında ya da biri düştüğünde bölümler yeniden dağıtılır (yeniden dengeleme). Bu sırada işlemeye kısa bir ara verilebilir. İşleme süresi uzun olan tüketicilerin ayarları, gruptan yanlışlıkla atılmayı önleyecek şekilde dikkatle seçilmelidir.

Küme işletimi, güvenlik ve kapasite planı

Kafka'yı geliştirme ortamında çalıştırmak kolaydır; üretimde işletmek ise ayrı bir uzmanlık alanıdır. Kopya sayısı, bölümlerin broker'lara dengeli dağılımı, disk ve ağ kapasitesi, veri saklama süresi ve sıkıştırma ayarları doğrudan güvenilirliği ve maliyeti etkiler.

Güvenlik tarafında kimlik doğrulama, yetkilendirme ve şifreli iletişim temel gerekliliklerdir. Birden fazla ekibin ya da uygulamanın aynı kümeyi paylaştığı çoklu kiracı yapıda topic bazlı yetkilendirme ve kaynak kotaları önem kazanır.

İzleme olmadan Kafka işletilmez. Tüketici gecikmesi (consumer lag), bölüm dengesi, disk kullanımı ve broker sağlığı sürekli izlenmeli; eşiklere uyarı bağlanmalıdır. Kapasite planı için olay hacmi artışı, saklama süresi ve çoğaltma ile birlikte depolama ve ağ ihtiyacı önceden hesaplanır.

Örnek senaryo: sipariş olaylarının gerçek zamanlı işlenmesi

Örneğin bir e-ticaret şirketinde sipariş oluşturulduğunda stok, fatura, kargo ve bildirim servisleri haberdar olmalı. Sipariş servisi, her yeni siparişi sipariş numarası anahtarıyla bir topic'e yazar. Stok servisi, fatura servisi ve bildirim servisi ayrı tüketici gruplarında aynı olayı bağımsız okur.

Bir akış işleme uygulaması, sipariş olaylarını ödeme olaylarıyla birleştirerek ödemesi tamamlanmamış siparişleri tespit eder. Kafka Connect ile siparişler raporlama veritabanına aktarılır. Fatura servisi kısa süre kesintiye uğradığında olaylar Kafka'da beklemeye devam eder; servis geri geldiğinde kaldığı yerden okur ve hiçbir sipariş kaybolmaz.

Sık yapılan hatalar

  • Kafka'yı her sorun için kullanmak: Basit istek-yanıt iletişimi ya da küçük hacimli işler için Kafka gereğinden ağır olabilir.
  • Yanlış anahtar seçimi: Dengesiz anahtar bir bölümü aşırı yükler, sıralama ihtiyacı olmayan yerde anahtarsız bırakmak ise gereksiz sıra bağımlılığı yaratabilir.
  • Bölüm sayısını sonradan değiştirmeyi kolay sanmak: Artırmak mümkündür ama anahtar-bölüm eşleşmesini değiştirir; baştan öngörün.
  • Tüketim konumunu yanlış yönetmek: Kayıp ya da mükerrer işleme.
  • Şema yönetimini ihmal etmek: Olay yapısı değiştiğinde eski tüketiciler bozulur; geriye uyumluluk için şema yönetimi kurun.
  • İzlemesiz işletmek: Tüketici gecikmesi büyürken kimse fark etmez.

Mindset programlarında nerede çalışılır?

Mindset'in Apache Kafka ile Akış Mimarisi programı şu modülleri içerir: Topic Yönetimi ve Veri Modelleme, Producer API ve Mesaj Gönderme, Consumer API ve Tüketim Stratejileri, Kafka Streams ve Gerçek Zamanlı İşlem, Kafka Kümeleme ve Üretim Yönetimi, Kafka Mimarisi ve Temel Kavramlar, Kafka Connect ile Entegrasyon. Apache Kafka Küme İşletimi ve Kapasite Yönetimi programı ise Konu Tasarımı ve Bölümleme Stratejisi, Üretici Ayarları ve Dayanıklılık, Tüketici Grupları ve Yeniden Dengeleme, Depolama, Tutma ve Sıkıştırma, Güvenlik ve Çoklu Kiracı Yönetimi, İzleme, Bakım ve Arıza Yönetimi, Kapasite Planlaması ve İşletim Projesi konularını işler.

İlgili Mindset programı

Apache Kafka ile Akış Mimarisi

Sık sorulanlar

Sık sorulan sorular

Kafka ile RabbitMQ gibi mesaj kuyruğu arasındaki fark nedir?

Klasik kuyruklarda mesaj tüketilince genellikle kuyruktan kalkar. Kafka olayları belirli süre saklar ve birden çok tüketici grubunun bağımsız, hatta geçmişe dönük okumasına izin verir. Hangisinin uygun olduğu kullanım senaryosuna bağlıdır.

Kafka öğrenmek için hangi bilgiler gerekir?

Bir programlama dilinde (genellikle Java ya da benzeri) temel yetkinlik, dağıtık sistem fikri ve ağ ile komut satırı bilgisi yeterli başlangıçtır. Küme işletimi için ayrıca sunucu yönetimi ve izleme deneyimi işe yarar.

Kafka Streams ile Kafka Connect ne işe yarar?

Kafka Streams, topic'teki olayları uygulamanız içinde filtrelemek, birleştirmek ve pencere bazında toplamak için bir işleme kütüphanesidir; ayrı bir işleme kümesi gerektirmeden uygulamanın bir parçası olarak çalışır. Kafka Connect ise Kafka ile veritabanı gibi dış sistemler arasında hazır bağlayıcılarla veri taşır; bu işler için ayrıca uygulama kodu yazmanız gerekmez.

Tüketici gecikmesi (consumer lag) neden izlenir?

Tüketicinin üretimin ne kadar gerisinde kaldığını gösterir. Sürekli artması, tüketicinin yetişemediğini, takıldığını ya da yeniden dengelemelerle zaman kaybettiğini gösterebilir. Gerçek zamanlı sistemlerde ilk uyarı göstergelerinden biridir; gecikmenin hangi bölümde biriktiği, sorunun tek bir tüketicide mi yoksa genel bir yavaşlıkta mı olduğunu anlamaya yardım eder.

Apache Kafka ile Gerçek Zamanlı Veri Akışı Kurulumu