Spring Boot ile Apache Kafka Kullanımı: Yüksek Performanslı Veri İşleme

0 263

Apache Kafka’ya Giriş

Merhaba arkadaşlar! Bugün sizlere büyük veri dünyasının gözdesi Apache Kafka’dan bahsedeceğim. Kafka, yüksek hacimli veri akışlarını gerçek zamanlı olarak işlemek ve yönetmek için kullanılan, dağıtılmış bir akış işleme platformu. Başlangıçta LinkedIn tarafından geliştirilen bu harika araç, şimdi Apache Software Foundation tarafından açık kaynaklı olarak sunuluyor.

Kafka’nın Temel Bileşenleri

Kafka’nın yapısını anlamak için öncelikle bileşenlerine göz atalım:

  1. Topic (Konu): Mesajların kategorize edildiği yerdir. Her konu, belirli bir veri türünü veya veri akışını temsil eder.
  2. Producer (Üretici): Veriyi Kafka’ya gönderen bileşenlerdir. Üreticiler, belirli konulara veri gönderirler.
  3. Consumer (Tüketici): Veriyi Kafka’dan okuyan bileşenlerdir. Tüketiciler, belirli konuları dinleyerek veriyi alırlar.
  4. Broker: Kafka’nın çalıştığı sunuculardır. Veriyi depolar ve yönetirler.
  5. Zookeeper: Kafka’nın dağıtılmış yapısını yönetmek için kullanılan koordinasyon servisidir.

Kafka’nın Özellikleri ve Avantajları

Kafka’nın neden bu kadar popüler olduğuna bir bakalım:

  • Yüksek Performans: Kafka, yüksek hacimli veri akışlarını düşük gecikme ile işleyebilir. Bu da onu gerçek zamanlı uygulamalar için ideal kılar.
  • Dağıtılmış Mimari: Kafka, veri güvenilirliğini ve ölçeklenebilirliğini sağlamak için dağıtılmış bir yapı kullanır.
  • Kalıcılık: Kafka, verileri disk üzerinde tutarak veri kaybını önler ve gerektiğinde geçmiş verilere erişim sağlar.
  • Gerçek Zamanlı İşleme: Kafka, verileri anlık olarak işleyerek gerçek zamanlı analiz ve raporlama yapmayı mümkün kılar.

Kafka’nın Kullanım Alanları

Peki, Kafka’yı nerelerde kullanabiliriz? İşte bazı kullanım alanları:

  • Gerçek Zamanlı Analitik: Büyük veri analitiği için verilerin anlık olarak toplanması ve işlenmesi.
  • İzleme ve Günlük Yönetimi: Uygulamaların ve sistemlerin izlenmesi, günlük kayıtlarının toplanması ve analiz edilmesi.
  • Veri Entegrasyonu: Farklı veri kaynaklarının entegrasyonu ve senkronizasyonu.
  • Mesajlaşma: Mikro hizmetler arasında iletişim kurmak için güvenilir ve hızlı bir mesajlaşma altyapısı sağlama.

 

Örnek Uygulama

Uygulamamıza şöyle bir senaryo ekliyoruz. Medium gibi bir web uygulaması düşünelim ve bir makale yayınlandık için ilişkisel veritabanına kayıt edeceğiz ve sonra arama işlemlerini

daha hızlı yapabilmek için hem de asenkron olarak elasticsearch uygulamasına kayıt edeceğiz. Mimarimiz aşağıdaki gibi olacaktır.

Öncelikle aşağıdaki docker-compose.yml dosyasıyla bir kafka ayağa kaldıralım.

Producer

 

KafkaTemplate objesi üzerinden send methodu ile hangi topic’e göndereceğimizi belirtmemiz yeterli. Zaten KafkaConfig class’ında KafkaTemplate bean’ini oluşturmuştuk.

Fakat dikkat edilmesi gereken kısım bizim kafka’ya obje yazmak istememizle başlıyor. KafkaConfig class’ında da göreceğmiz üzere ProducerFactory ve KafkaTemplate bean olarak tanımlarken

serialization kısmında JsonSerializer kullandık ve <key,value> tanımlarımız <String, Object> olarak gerçekleştirdik.

Service

 

Consumer

ConsumerConfig

Bu ayar, hangi paketlerin güvenilir olduğunu belirler. JsonDeserializer, gelen JSON verilerini Java nesnelerine dönüştürmek için kullanılır.

Güvenlik amacıyla, yalnızca belirli paketlerden gelen verilerin deseralize edilmesine izin verilebilir. * değeri, tüm paketlerin güvenilir olduğunu ve

tüm paketlerden gelen verilerin deseralize edilebileceğini belirtir.

Bu ayar, JSON verilerinin deseralize edilmesi sırasında tip bilgisi başlıklarının kullanılıp kullanılmayacağını belirler.

Kafka mesajları genellikle bir başlık (header) kısmına sahiptir ve bu başlıklar ek bilgiler içerebilir. USE_TYPE_INFO_HEADERS ayarı false olarak ayarlandığında,

deseralizer tip bilgisi başlıklarını kullanmaz ve JSON verilerini direkt olarak deseralize eder.

 

Service

Kaynak

https://kafka.apache.org/

 

Faydalı olması dileğiyle.

Email adresiniz yayınlanmayacaktır.