Apache Kafka Nedir (Giriş)?

Merhabalar. Sizlere Apache Kafka hakkında bilgiler vereceğim. Bu yazımızda daha çok Kafka nedir ve ne için kullanılır gibi sorulara cevap vereceğiz. Detaylı bilgi için buradan Apache Kafka’nın resmi internet sitesine erişebilirsiniz.

Kafka Mimari

Kafka, gerçek zamanlı veri yolu ve akış uygulamaları oluşturmak için kullanılır. Yatay olarak ölçeklendirilebilir, hataya dayanıklı ve hızlıdır. Halihazırda binlerce şirket tarafından aktif olarak kullanılmaktadır. (Bu yazı yazıldığında güncel versiyonu 2.7.X’tir) Apache Kafka dağıtılmış bir akış platformu olarak hizmet veriyor. Peki bu tam olarak ne anlama geliyor? Açıklamaya çalışayım.

Olay akışı (event streaming), insan vücudunda yer alan sinir sisteminin dijital dünyada karşılığıdır diyebiliriz. Teknik olarak, veri tabanları, sensörler, mobil cihazlar, bulut hizmetleri ve yazılım uygulamaları gibi olay kaynaklarında oluşan akışlara olay akışı denir. Kafka ise gerçek zamanlı olarak bu akış verilerini yakalama uygulamasıdır. Kafka, bu olay akışlarını daha sonra geri çağırılabilecek şekilde kalıcı olarak depolar. Depolanan olay akışlarını gerçek zamanlı ve geçmişe dönük olarak manipüle edebilir, işleyebilir ve istenirse bu olay akışlarının gerektiği gibi farklı hedef teknolojilere yönlendirebilir. Bu nedenle olay akışı, verilerin sürekli akışını ve yorumlanmasını sağlar, böylece doğru bilgiler doğru yerde, doğru zamanda olur.

Peki olay akışı sistemini hangi amaçlarla kullanabiliriz?

Mevcutta bir çok sektörde ve bir çok iş çözümünde kullanılabilir. Bunlar;

  • Gerçek zamanlı finans tabanlı sistemlerde (borsa, banka, sigorta vb.)
  • Gerçek zamanlı araç takibi sistemlerinde
  • IoT cihazlar dediğimiz sensörlü sistemlerin veri iletiminde
  • Ticari işlemlerde, sipariş müşteri yönetiminde
  • Sağlık sektöründe hasta takibinde
  • Aynı ekosistem içinde yer alan birden fazla veri kaynağını tek bir noktada toplamak

Bunlar örneklerden sadece bir kaç tanesi. Olay akış sistemi daha bir çok alanda kullanılmaktadır ve kullanılabilmektedir.

Apache Kafka için bir olay akış platformu diyebiliriz. Peki bu tam olarak ne anlama geliyor? Kafka diğer sistemlerden (bu herhangi bir kaynak olabilir) gelen verileri üzerine yazar, istendiği zaman okunmasına izin verir, uzun süre depolar. Bu verileri anlık olarak (real-time) veya geriye dönük işlemenize olanak sağlar.

Tüm bu işlemleri yaparken aynı anda milyonlarca veri üzerinde işlem yapma imkanı sunar. Ayrıca birden fazla Kafka sunucusu ile paralel çalışabilir ve bu sayede esneklik ve veri bütünlüğü imkanı sağlar. Kafka uygulamasını bulut sistemlerde, kendi sunucularınızda, sanal makinelerde vs. özgürce kullanabilirsiniz.

Kafka’nın kısaca çalışma mantığından bahsedelim. Kafka, yüksek performanslı bir TCP ağ protokolü üzerinden iletişim kuran sunucular ve istemcilerden oluşan dağıtılmış bir sistemdir. Kafka, birden çok veri merkezine veya bulut bölgesine yayılabilen bir veya daha fazla sunucudan oluşan bir küme olarak çalıştırılır. Bu sunuculardan bazıları, aracılar adı verilen depolama katmanını oluşturur. Diğer sunucular, Kafka’yı ilişkisel veritabanları ve diğer Kafka kümeleri gibi mevcut sistemlerinizle entegre etmek için verileri olay akışları olarak sürekli olarak içe ve dışa aktarmak için Kafka Connect’i çalıştırır. Görev açısından kritik kullanım durumlarına hazırlıklıdır. Sunuculardan herhangi biri arızalanırsa, diğer sunucular herhangi bir veri kaybı olmadan sürekli işlemleri sağlamak için işlerini devralır. Ağ sorunları veya makine arızaları durumunda bile olay akışlarını paralel, ölçekte ve hataya dayanıklı bir şekilde okuyan, yazan ve işleyen dağıtılmış uygulamalar ve mikro hizmetler yazmanıza olanak tanır.

Kavramlar ve Terminoloji

Olay denilen kavram, kayıt veya mesaj olarak da adlandırılır. Kafka’ya veri okuduğunuzda veya yazdığınızda, bunu olaylar şeklinde yaparsınız. Kavramsal olarak, bir etkinliğin bir anahtarı, değeri, zaman damgası ve isteğe bağlı meta veri başlıkları vardır. Örnek bir olay üzerinde inceleyelim;

  • Anahtarı: “Fatih”
  • Değeri: “Aydın’a 100 TL ödeme yaptı”
  • Zaman damgası: “23 Mart 2021, 23:26”

Kafka için veri sağlayan (producer) ve veri kullanan (consumer) uygulamalar vardır. Kafka sayesinde veri sağlayanlar ve veri kullananlar birbirlerinden haberdar olmazlar. Bu yapı tıpkı REST API’lerde olduğu gibidir. Ayrıca veriyi kullananlar hiçbir zaman veri sağlayanı beklemez.

Kafka verileri bir klasörleme veya bir veritabanı tablosu mantığında işler. Kafka verileri birden fazla konu halinde tutabilir. Örneğin; tahsilatlar, müşteriler, ürünler vs. Ayrıca her bir konuyu da birden fazla veri kullanan sistem aynı anda okuyabilir.

Daha önce de bahsettiğim gibi Kafka verilerinizi dağıtık ve yedekli şekilde (cluster) tutar. Birden fazla (tavsiye en az 3 tane) kafka sunucusu birbiri ile haberleşerek çalışmaya imkan tanıyor ve sistemlerden biri erişilemez olduğunda o sistemin iş yükünü diğer sistemler devralabiliyor ve hiçbir zaman kesinti ve veri kaybı olmuyor.

Şimdi Kafka API lerinden bahsedelim.

Kafka’yı yönetmek için tahmin edeceğiniz üzere bazı komut satırları vardır. Bunlara ek olarak Java ve Scala için beş temel API’ye sahiptir.

  • Konuları, aracıları ve diğer Kafka nesnelerini yönetmek ve incelemek için Admin API.
  • Bir veya daha fazla Kafka konusuna bir olay akışı yayınlamak için Producer API.
  • Bir veya daha fazla konuya abone olmak (okumak) ve bunlar için üretilen olay akışını işlemek için Consumer API.
  • Akış işleme uygulamalarını ve mikro hizmetleri uygulamak için Kafka Streams API.
  • Kafka ile entegre olabilmeleri için harici sistemlerden ve uygulamalardan olay akışlarını tüketen (okuyan) veya üreten (yazan) yeniden kullanılabilir veri içe / dışa aktarma bağlayıcıları oluşturmak ve çalıştırmak için Kafka Connect API. Örneğin, PostgreSQL gibi ilişkisel bir veritabanına bir bağlayıcı, bir tablo kümesindeki her değişikliği yakalayabilir.

Bundan sonraki Kafka yazımızda kullanım senaryoları (Use Cases) konusundan bahsedeceğiz. Sonrasında ise Kurulum ve Kullanım aşamaları ile devam edeceğiz. Vakit ayırıp okuduğunuz için teşekkür ederim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir