Kafka Nedir?

Emre Akın
4 min readOct 23, 2023

--

Apache Kafka, büyük hacimli gerçek zamanlı verileri işlemek için tasarlanmış dağıtılmış bir akış platformudur. Stream-processing, real-time data pipeline ve data integration için kullanılan açık kaynaklı bir sistemdir. LinkedIn, Kafka’yı ilk olarak 2011 yılında real-time veri akışlarını yönetmek için geliştirdi. Publish/subscribe konsepti üzerine inşa edilmiştir ve yüksek verim, güvenilirlik ve hata toleransı sağlar. Saniyede bir milyondan fazla mesajı veya günde trilyonlarca mesajı işleyebilir.

Kafka, modern veri akışları için kritik bir araçtır. Veriler her geçen gün büyümeye devam ederken, büyük miktarda veriyi yönetecek araçlara ihtiyacımız var. Bu iki zorluğu beraberinde getirir: Birincisi büyük miktarda verinin nasıl toplanacağı ve ikincisi toplanan verilerin nasıl analiz edileceği. Bu zorlukların üstesinden gelmek için bir mesajlaşma sistemine ihtiyacımız var.

Bir mesajlaşma sistemi, uygulamalar arasında veri aktarımına yardımcı olur. Kaynak sistem; uygulama, e-posta, finansal veriler, veri akışı vb. gibi herhangi bir sistem olabilir. Hedef sistem de veritabanı, e-posta veya analitik vb. herhangi bir sistem olabilir. Birden fazla kaynağımız ve hedef sistemimiz varsa her bir kaynak sistemin hedef sisteme bağlanması gerekir. Bu da kaynak ve hedef sistemler arasında çoklu entegrasyonlarla sonuçlanır.

Bu noktada Kafka ortaya çıkıyor. Apache Kafka, kaynak ve hedef sistemi ayırmamıza yardımcı olur. Kaynak sistemlere, Kafka brokerlarına birden fazla veri akışı gönderebilen producers denir. Hedef sistemlere, müşterilerin brokerlardan gelen verileri okuyabildiği ve işleyebildiği consumers denir. Birden fazla consumer aynı verileri okuyabilir; tek bir destinasyonla sınırlı değildir. Kaynak ve hedef sistemler tamamen ayrıştırılarak karmaşık entegrasyonlardan kaçınılır.

Firmaların kullanabileceği iki tür mesajlaşma sistemi bulunmaktadır: Point-to-point ve publish-subscribe mesajlaşma sistemleri. Point-to-point sistemde, producers verileri bir kuyrukta tutar ve kuyruktaki verileri yalnızca bir uygulama okuyabilir. Bu sistem verileri okuduğunda mesaj kuyruktan kaldırılır.

Publish-subscribe mesajlaşma sisteminde consumers mesaj kuyruğundaki birden fazla konuya abone olabilir ve uygulamalarıyla ilgili spesifik mesajlar alabilirler. Apache Kafka, publish-subscribe mesajlaşma sistemini temel alır.

Apache Kafka’nın Avantajları

  • Low Latency: Apache Kafka, 10 milisaniyeye kadar düşük gecikme değeri sunar. Bunun nedeni, consumerın bu mesajı istediği zaman consume etmesine olanak tanıyan mesajı ayrıştırmasıdır.
  • High Throughput: Düşük gecikme nedeniyle Kafka, daha fazla sayıda, yüksek hacimli ve yüksek hızlı mesajı işleyebilir. Kafka saniyede binlerce mesajı destekleyebilir. Uber gibi birçok şirket, yüksek miktarda veri yüklemek için Kafka’yı kullanıyor.
  • Fault tolerance: Kafka, cluster içerisindeki node/makine arızasına karşı dayanıklılık sağlama konusunda önemli bir özelliğe sahiptir.
  • Durability: Kafka, verilerin veya mesajların bir disk üzerinden clusterda daha fazla kalmasını sağlayan replication özelliğini sunar.
  • Çoklu entegrasyon ihtiyacını azaltır: Bir producerın yazdığı tüm veriler Kafka’dan geçer. Bu nedenle bize, bizi her producer ve consumer sistemle bağlayacak Kafka ile entegre tek bir uygulama yazmamız yetecektir.
  • Kolayca erişilebilir: Tüm verilerimiz Kafka’da saklandığından herkes tarafından kolayca erişilebilir hale gelir.
  • Distributed System: Apache Kafka, onu ölçeklenebilir kılan dağıtılmış bir mimari içerir. Partitioning and replication, dağıtılmış sistem altındaki iki yetenektir.
  • Real-Time handling: Apache Kafka, gerçek zamanlı veri hattını işleyebilir. Gerçek zamanlı bir veri hattı oluşturmak işlemcileri, analizleri, depolamayı vb. içerir.
  • Batch approach: Kafka batch senaryoları için de kullanır. Data persistence özelliği nedeniyle bir ETL aracı gibi de çalışabilir.
  • Scalability: Kafka’nın büyük miktarda mesajı aynı anda işleyebilme kalitesi, onu ölçeklenebilir bir yazılım ürünü haline getirir.

Apache Kafka’nın Dezvantajları

  • Eksiksiz monitoring tooları yoktur: Apache Kafka, izleme ve yönetim araçlarının tamamını içermez. Bu nedenle yeni girişimler Kafka ile çalışmaktan korkuyor.
  • Mesaj düzenleme sorunları: Kafka broker, mesajları consumera iletmek için sistem çağrılarını kullanır. Mesajın biraz ayarlanması gerekiyorsa Kafka’nın performansı önemli ölçüde azalır.
  • Wildcard topic isimlendirmesi yoktur: Apache Kafka wildcard topic isimlendirmesini desteklemez. Bunun yerine kesin topic ismi verilmesi gerekmektedir. Bunun nedeni belirli kullanım alanlarında wildcard topic isimlendirmesi bazı problemlere yol açmaktadır..
  • Performansı Düşürür: Brokerlar ve consumerlar, veri akışını sıkıştırıp açarak Kafka’nın performansını azaltır. Bu yalnızca performansını etkilemez, aynı zamanda verimi de etkiler.
  • Clumsy Behaviour: Apache Kafka, clusterdaki kuyruk sayısı arttığında çoğunlukla biraz beceriksiz davranır.
  • Bazı mesaj paradigmalarının eksikliği: Point-to-point kuyrukları, request/reply vb. gibi belirli mesaj paradigmaları, bazı kullanım durumları için Kafka’da eksiktir.

Kullanım Alanları

Kafka için farklı kullanım durumlarının sayısı neredeyse sonsuzdur. Gerçek dünyada halihazırda kullanan birçok uygulama var. Bazı kullanım senaryoları aşağıda listelenmiştir. Ama unutmayın, Kafka sadece bir mesaj kuyruğundan ibaret değildir.

Real-time Data Pipelines

Kafka’nın en yaygın kullanım durumlarından biri gerçek zamanlı veri hatları oluşturmaktır. Örneğin sensörlerden, log dosyalarından, sosyal medya platformlarından ve diğer kaynaklardan veri toplamak ve bunları veri ambarlarına, makine öğrenimi platformlarına ve diğer hedeflere aktarmak için kullanılabilir.

Messaging Systems

Kafka aynı zamanda uygulamalar ve servisler arasında hızlı ve verimli mesaj iletimine olanak tanıyan bir mesajlaşma sistemi olarak da kullanılabilir. Örneğin sohbet uygulamalarına, e-posta sistemlerine ve diğer gerçek zamanlı iletişim sistemlerine güç sağlamak için kullanılabilir.

Stream Processing

Kafka’nın Apache Flink ve Apache Spark Streaming gibi akış işleme frameworklerini desteklemesi, gerçek zamanlı veri işleme ve analize olanak tanır. Örneğin gerçek zamanlı dolandırıcılık tespit sistemleri, gerçek zamanlı öneri motorları ve gerçek zamanlı duyarlılık analiz sistemleri oluşturmak için kullanılabilir.

Event-driven Architecture

Kafka’nın event-driven mimariyi desteklemesi, onu karmaşık, event-driven uygulamalar oluşturmak için ideal bir araç haline getirir. Kafka ile eventler gerçek zamanlı olarak üretilebilir, tüketilebilir ve işlenebilir. Örneğin event-driven microservice mimarileri, IoT platformları ve diğer event-driven sistemler oluşturmak için kullanılabilir.

Log Aggregation

Kafka aynı zamanda log toplama için de kullanılabilir; böylece birden fazla kaynaktan gelen logların toplanması, depolanması ve analiz edilmesi sağlanır. Örneğin web sunucularından, veritabanlarından ve diğer sistemlerden logları toplamak ve analiz etmek için kullanılabilir.

Bir sonraki yazımda kafkanın nasıl çalıştığından ve temel bileşenlerinden bahsedeceğim.

Part 2 -> https://medium.com/@cobch7/kafka-mimarisi-e786ce9c9af0

--

--