Kafka Streams Giriş

Serkan Eren
Devops Türkiye☁️ 🐧 🐳 ☸️
3 min readDec 30, 2019

Önceki yazımda Apache Kafka ile ilgili temel kavramları açıklamıştım. Bu yazıda Apache Kafka Streams API’a giriş yapacağız. Nedir, ne amaçla kullanılır, temel özelliklerini inceleyeceğiz.

Kafka Streams nedir, ne amaçla kullanılır?

Kafka Streams, Kafka’da depolanan verilerin anlık olarak işlenmesi ve analiz edilmesi için geliştirilmiş bir client kütüphanesidir. Girdi ve çıktı verilerinin Kafka’da saklandığı, ölçeklenebilir, esnek, hataya dayanıklı, dağıtık uygulamalar ve mikro servisler geliştirmek için kullanılır. Kafka Streams API, temel işinize güç katacak gerçek zamanlı uygulamalar oluşturmanıza imkan tanır. Akan veri üzerinden hesaplamalar yapmamızı sağlar. Arkasındaki Kafka Cluster ile entegre çalışır.

Günümüzde stream processing talebi her geçen gün artmaktadır. Bunun arkasındaki temel neden, yalnızca hacimli verilerin işlenmesinin yeterli olmaması, verilerin daha hızlı işlenmesi, analiz edilmesi ve gerçek zamanlı olarak verilerle ilgili değer üretilmesinin çok önemli olması, böylece kuruluşun değişen iş koşullarına gerçek zamanlı olarak tepki verebilmesidir.

Kafka Streams API için kullanım örnekleri:

  • Finans sektöründe farklı veri kaynaklarının birleştirilerek potansiyel risklerin gerçek zamanlı görülmesi, fraud işlemlerin tespiti ve azaltılması amacıyla kullanılabilir.
  • Seyahat şirketleri, bireysel müşteriler için en uygun fiyatı bulmak, ek hizmetlerin çapraz satışı, rezervasyon ve rezervasyonları işlemek gibi gerçek zamanlı karar verecek uygulamaları Kafka Streams API ile geliştirebilir.
  • Lojistik şirketleri gönderilerini hızlı, güvenilir ve gerçek zamanlı izlemek için uygulamalar geliştirebilir.
  • Perakendeciler bir sonraki en iyi teklife, kişiselleştirilmiş promosyonlara, fiyatlandırma ve envanter yönetimine gerçek zamanlı olarak karar vermek için kullanabilir.
  • Otomotiv ve imalat şirketleri, üretim hatlarının en iyi şekilde çalışmasını sağlamak, tedarik zincirlerine gerçek zamanlı bilgi sağlamak için uygulamalar geliştirebilir.

Kafka Streams API’sinin en önemli özelliklerinden bir tanesi de, onunla oluşturduğunuz uygulamaların normal Java uygulamaları olmasıdır. Bu uygulamalar, benzer amaçla kullanılan ayrı cluster sunucular (Spark vs) veya pahalı altyapı kurmaya gerek kalmadan, diğer uygulamalar gibi paketlenebilir, dağıtılabilir ve izlenebilir.

Kafka Streams, büyük veri özelinde olan Stream Processing (akan veri üzerinden işlem yapma) kavramını uygulama geliştirme dünyasına taşıyarak bu işlemlerin basit ve kolay yapılmasını sağlamıştır. Küçük veya büyük ölçekli stream processing ihtiyaçlarınız için Kafka Streams API kullanarak normal Java uygulamaları geliştirebilir, bu uygulamaları Kafka cluster sunucuları çevresinde client makinelerde koşturabilirsiniz.

  • Geliştireceğiniz uygulamalar esnektir: Uygulamanızı tek veya cluster olacak şekilde çalıştırabilirsiniz, bunlar birbirlerini otomatik olarak keşfedecek ve verileri birlikte işleyecektir.
  • Geliştireceğiniz uygulamalarınız ayrıca hataya da dayanıklıdır: Uygulama örneklerinden biri ölürse, herhangi bir veri kaybı olmadan kalan örnekler otomatik olarak işini üstlenecektir.

Temel Özellikleri

Aşağıdaki listede Kafka Streams API’ın bazı temel özellikleri ve yönleri vurgulanmaktadır.

Güçlü

  • Uygulamalarınızı yüksek ölçeklenebilir, elastik, dağıtılmış, hataya dayanıklı hale getirir
  • Exactly Once Processing (tam olarak bir kez işleme) semantiğini destekler
  • Stateful processing (window, aggregation işlemleri vs) ve stateless processing (veriyi zenginleştirme, veri transformasyonu vs)
  • Windowing, joins, aggregations ile event-time processing
  • Streams ve veritabanlarının dünyalarını birleştirmek için Interactive Queries (Etkileşimli Sorguları) destekler
  • Basit declarative functional API yada alt seviye imperative API

Lightweight (Hafif)

  • Kolay başlangıç
  • Küçük, orta, büyük ve çok büyük kullanım durumları için eşit derecede uygulanabilir
  • Local geliştirmeden üretime sorunsuz bir geçiş
  • Cluster processing sunucuları gerektirmez
  • Kafka harici bir bağımlılığı yoktur

Tamamen entegre

  • Kafka 0.11+ ile %100 uyumlu
  • Mevcut uygulama ve mikro servislere kolaylıkla entegre olabilme
  • Uygulamalarınızı paketleme, dağıtma ve izleme için yapay kurallar yoktur
  • Her yerde çalışır: şirket içi, genel bulutlar, özel bulutlar, konteynerler, vb.
  • Kafka Connect tarafından gerçekleştirilen sürekli değişiklik veri yakalama yöntemi (CDC) ile veritabanlarıyla bütünleşir

Gerçek Zamanlı

  • Milisaniye işleme gecikmesi
  • Her seferinde bir kayıt işleme (mikro batching yok)
  • Geç gelen ve sırası dışındaki verileri sorunsuz bir şekilde işler
  • Yüksek throughput

Güvenli

  • Aktarılan verilerin şifrelenmesini destekler
  • Kimlik doğrulama ve yetkilendirmeyi destekler

Özetle, Kafka Streams API aşağıdaki durumlarda alternatiflerine (Spark, Storm vs) göre ideal çözüm olarak düşünülebilir.

  • Stream processing uygulamamız kafka’dan kafka’ya pipeline oluşturuyorsa
  • Stream processing amacıyla ayrıca cluster yapılar kurmak istenmiyorsa
  • Akan veri üzerinde filtreleme, joins, aggregations, veri zenginleştirme gibi basit stream processing fonksiyonları gerçekleştirilmek isteniyorsa
  • Hedef kullanıcılar java geçmişleri olan geliştiricilerse

Bir sonraki yazıda da temel kavramlarını ve mimarisini anlatmayı planlıyorum.

Kaynaklar:

https://docs.confluent.io/

https://kafka.apache.org/

Apache Kafka ile ilgili önceki yazılarım:

--

--