Apache Kafka Nedir, Ne Zaman Kullanılır? #1
Apache kafkadan bahsetmeden önce, neden kullanıldığını anlamak için öncelikle geçmişten günümüze gelen yazılım mimarilerinden bahsetmek daha faydalı olacaktır. Geçmişte monolith olarak tasarlanan yazılım uygulamaları günümüzde microservis olarak tasarlanmaya başlandı. Önceden tek bir uygulama içerisinde(monolith) barındırdığımız tüm servisleri, microservis yaklaşımı ile birlikte ayrı ayrı parçalar/servisler halinde tasarlamaya başladık. Böylelikle her servisi birbirinden bağımsız şekilde geliştirebilir ve deploy edebilir hale geldik.
Microservis yaklaşımında pek çok servis birbiriyle iletişimdedir. Bu mimari yaklaşımı; request/response architecture olarak tanımlayabiliriz. Bu mimari yaklaşımın beraberinde getirdiği zorlukları aşağıdaki örnek ile daha detaylı inceleyebiliriz.
E-ticaret sistemi geliştirdiğimizi farzedelim. Bu sistemde basket service, customer service, account service, cards service, payment service, alerting service, mail service, monitoring service gibi pek çok servisimizi geliştirdik ve birbirleriyle konuşur hale getirdik. Fakat buradaki tüm servisler birbirlerine bağlı şekilde çalışıyorlar. Bu servislerden herhangi birinin down olduğu durumda, tüm sistem zarar görecek ve veri akışı sağlanamayacaktır.
Yukarıda bahsettiğimiz problemlere çözüm olarak, event driven architecture mimari yaklaşımı ortaya çıktı. Event driven architecture sayesinde tüm servisler birbirinden bağımsız ve asenkron şekilde message bus(mesaj ünitesi) üzerinden haberleşmeye başladılar. Burada bahsettiğimiz mesajlaşma ünitelerinden en popüler olanı ise Apache Kafka’dır.
Şimdi gelelim Apache Kafkadan bahsetmeye..
Apache Kafka Nedir, Neden Kullanılır?
Apache kafka yukarıda da bahsettiğimiz üzere, bir mesajlaşma sistemidir(message bus). Kafka sayesinde her servis direkt birbirleriyle konuşmak yerine kafka üzerinden asenkron olarak haberleşebilirler. Her servisimiz event bazlı olarak birbirleriyle asenkron şekilde haberleşebilirler. Peki kafkanın avantajları nelerdir?
- Latency oranının çok düşük olması(low latency — milisaniyeler seviyesinde),
- Ölçeklenebilir(scalable)
- Hız performansı. Saniyede milyonlarca event’i işleyebilir.
- Yüksek performans.
- Veri kaybının olmaması(mesajlar harddisklerde tutulduğu için veri kaybı söz konusu değildir)
- Yüksek veri ile real time stream processing performansının diğer message bus sistemlerine göre çok daha yüksek olması.
Apache Kafka Neden Kullanılır?
Apache kafka; verilere anlık erişim ve işleme ihtiyacımız noktasında karşımıza çıkmaktadır. Apache kafka kullanımına ihtiyaç duyacağımız birkaç use case’den bahsedebiliriz.
- Recommendation engine: Spotify ya da SoundCloud gibi bir müzik dinleme ve paylaşma platformumuz olduğunu farzedelim. Kullanıcıların dinlediği tüm müzikleri ve hareketlerini event olarak kafkaya gönderiyoruz. Kullanıcıların neler dinlediğini ve neler yaptığını analiz ederek, kullanıcının dinleme ihtimali yüksek müzikleri önüne getirmek istiyoruz. Event olarak tuttuğumuz kullanıcının hareketlerini, veritabanına göndererek bunları yine bir api/servis aracılığıyla müzik platformumuza gönderiyoruz. Böylelikle kullanıcının dinlediği müzikler değiştikçe, bu veriyi anlık analiz edip kullanıcıya uygun müzikleri listeleyebiliyoruz.
- Log toplama sistemleri: Sistemdeki anlık logları toplayıp, bu verileri işleme ihtiyacında kullanılabilir.
- Monitoring araçları.
- Real Time Stream Processing: İçeriğin belirli kaynaklara stream edilmesi/dağıtılması gereken durumlarda genellikle tercih edilir. Örnek olarak; youtube, spotify gibi platformlar düşünülebilir.
Apache Kafka Kullanan Şirketler:
- Linkedin,
- Netflix,
- Twitter,
- Uber,
- Spotify
Apache Kafka Bileşenleri Nelerdir?
Apache kafkanın ne amaçlı kullanıldığından bahsettiğimize göre artık kafka bileşenlerinden temel olarak bahsedebiliriz.
- Broker: Her cluster içerisinde bir veya daha fazla broker barındırır. Broker’ları grup halinde sunucular şeklinde düşünebiliriz. Grup halindeki broker’lar ise cluster dediğimiz yapıyı oluşturmuş olur. Kafkaya gönderdiğimiz veriler aslında brokerlarda saklanır ve işlenir.
- Topic: Topic’ler brokerların içerisinde saklanır. Veriler topiclerin içerisine yazılır.
- Zookeeper: Apache lisanslı açık kaynak kodlu bir yazılım olan zookeeper, broker’ları yönetmekten sorumludur diyebiliriz. Eklenen/silinen topiclerin ve çöken broker’ların tespit edilmesi, lider partition seçimi gibi koordinasyon işlemlerini gerçekleştirir.
- Producer: Kafkaya verileri yazan servislerimiz producer olarak tanımlanır.
- Consumer: Kafkadan verileri okuyan yani consume eden, topicleri dinleyen servislerimiz ise consumer olarak isimlendirilir.
Apache kafkanın detaylarına diğer yazı serilerimize yer vererek, java ile kafka uygulaması yayına alıyor olacağız.