Kafka olay akışı açıklaması

0 Hisse senetleri
0
0
0
0

giriiş

Geleneksel veri işleme ve alma yöntemleri (toplu işleme ve yoklama gibi), modern uygulamalarda kullanılan mikro hizmetler bağlamında verimsizdir. Bu yöntemler, büyük veri yığınları üzerinde çalışır ve bu da işlemelerinin nihai sonucunu geciktirir ve işlenebilmeleri için önemli miktarda verinin biriktirilmesini zorunlu kılar. Çalışanları senkronize etmek için gereken ek karmaşıklığı ortaya çıkarır ve kaynak kullanımlarına rağmen bazılarının yeterince kullanılmamasına neden olabilir. Buna karşılık, bulut bilişim şirket içi kaynaklar için hızlı ölçeklenebilirlik sağladığından, gelen veriler paralel olarak birden fazla çalışana devredilerek gerçek zamanlı olarak işlenebilir.

Olay akışı, farklı sistemler arasında sürekli bir veri akışı sağlarken gelen olayları esnek bir şekilde toplayıp işlenmek üzere devretmeyi sağlayan bir yaklaşımdır. Gelen verilerin anında işlenmek üzere planlanması, maksimum kaynak kullanımı ve gerçek zamanlı yanıt süresi sağlar. Olay akışı, üreticileri tüketicilerden ayırır ve mevcut yüke bağlı olarak her birinden orantısız sayıda bulundurmanıza olanak tanır. Bu, dinamik gerçek dünya koşullarına anında tepki vermenizi sağlar.

Bu tür bir duyarlılık, özellikle finansal ticaret, ödeme izleme veya trafik izleme gibi alanlarda önemli olabilir. Örneğin, Uber olay akışını kullanarak yüzlerce mikro hizmeti birbirine bağlar, olay verilerini yolcu-sürücü uygulamalarından gerçek zamanlı olarak gönderir ve daha sonra analiz edilmek üzere arşivler.

Olay yayını sayesinde, bir çalışanın geleneksel olarak düzenli aralıklarla bir veri paketi beklemesi yerine, olay aracısı, olay meydana gelir gelmez tüketiciyi (genellikle bir mikro servis) bilgilendirebilir ve olay verilerini sağlayabilir. Olay aracısı, olayların yönlendirilmesi, alınması ve iletilmesiyle ilgilenir. Ayrıca, bir çalışanın başarısız olması veya bir olayı işlemeyi reddetmesi durumunda hata toleransı sağlar.

Bu konsept yazısında, olay akışı yaklaşımını ve faydalarını inceleyeceğiz. Ayrıca, açık kaynaklı bir olay aracısı olan Apache Kafka'yı tanıtacak ve bu yaklaşımdaki rolünü inceleyeceğiz.

Olay akışı mimarisi

Olay akışı, özünde, yayınla/abone ol mimari modelinin bir uygulamasıdır. Genel olarak, yayınla/abone ol modeli şunları içerir:

  • İletilen mesajların (iletmek istediğiniz herhangi bir veri dahil) ele alındığı konular.
  • Mesaj üreten yayıncılar
  • Mesajları alan ve bunlara göre hareket eden aboneler
  • Yayıncılardan gelen mesajları kabul eden ve bunları abonelere en verimli şekilde ulaştıran bir mesaj aracısıdır.

Bir konu, bir mesajın ilişkilendirildiği bir kategoriye benzer. Konular, mesaj dizisini kalıcı olarak saklar ve yeni mesajların her zaman dizinin sonuna eklenmesini sağlar. Bir mesaj bir konuya eklendikten sonra, daha sonra değiştirilemez.

Etkinlik yayıncılığında da temel mantık benzerdir, ancak daha özelleşmiştir:

  • Olaylar ve ilgili meta veriler mesaj olarak gönderilir.
  • Bir konudaki olaylar genellikle varış saatine göre sıralanır.
  • Abone (tüketici) olarak da adlandırılanlar, ileti dizisindeki herhangi bir noktadan o ana kadar olan olayları yayınlayabilirler.
  • Gerçek pub/sub'un aksine, bir konuya ilişkin etkinlikler belirli bir süre boyunca veya süresiz olarak (arşiv olarak) saklanabilir.

Olay akışı, bir olayın niteliği hakkında herhangi bir kısıtlama getirmez veya varsayımda bulunmaz. Altta yatan aracı kurum açısından, bir üreticinin kendisine bir şey olduğunu bildirdiği anlamına gelir. Gerçekte ne olduğunu tanımlamak ve uygulamanıza anlam kazandırmak size kalmıştır. Bu nedenle, aracı kurumun bakış açısından olaylar, birbirinin yerine mesaj veya kayıt olarak adlandırılır.

Örnek olarak, Confluent dokümantasyonundan Kafka olay akışı mimarisinin ayrıntılı bir diyagramı aşağıda verilmiştir:


Tüketicilerin bir aracıdan veri almalarına ilişkin iki model vardır: itme ve çekme. İtme, olay aracısının başlangıçta kullanılabilir bir tüketiciye veri gönderme sürecini başlatmasını ifade ederken, çekme, tüketicinin aracıdan daha sonra kullanılabilir kayıtları talep etmesi anlamına gelir. Bu ayrım zararsız görünse de, pratikte çekme tercih edilir.

Push'un yaygın olarak kullanılmamasının temel nedenlerinden biri, aracının tüketicinin olay üzerinde gerçekten işlem yapabileceğinden emin olamaması. Bu nedenle, olayı gereksiz yere birden fazla kez gönderebilir ve yine de konu başlığında saklaması gerekebilir. Aracı ayrıca, daha yüksek verimlilik için olayları toplu olarak göndermeyi de düşünmelidir; bu, olayları mümkün olduğunca hızlı yayınlama fikrinin tam tersidir.

Tüketicinin işlemeye hazır olduğunda veri çekmesi, gereksiz ağ trafiğini azaltır ve daha fazla güvenilirlik sağlar. Bu, yalnızca işlemeye hazır olduğunda veri almasını sağlar. İşlem süresi iş mantığına bağlıdır ve çalışan sayısının zamanlamasını etkiler. Her iki durumda da, aracı, tüketicinin hangi olayları onayladığını hatırlamalıdır.

Artık etkinlik akışının ne olduğunu ve hangi mimariye dayandığını bildiğinize göre, bu dinamik yaklaşımın faydalarını öğreneceksiniz.

Etkinlik akışının faydaları

Etkinlik yayıncılığının başlıca faydaları şunlardır:

  • Tutarlılık: Olay aracısı, olayların tüm ilgili tüketicilere doğru şekilde gönderilmesini sağlar.
  • Hata toleransı: Bir tüketici bir olayı kabul etmezse, hiçbir olayın işlenmemiş kalmamasını sağlamak için başka bir yere yönlendirilebilir.
  • Yeniden Kullanılabilirlik: Bir iş parçacığında depolanan olaylar değiştirilemez. Tamamıyla veya belirli bir zaman noktasından itibaren tekrar oynatılabilirler; bu sayede iş mantığınız değiştiğinde olayları yeniden işleyebilirsiniz.
  • Ölçeklenebilirlik: Üreticiler ve tüketiciler ayrı varlıklardır ve birbirlerini beklemek zorunda değillerdir; bu da talebe bağlı olarak dinamik olarak ölçeklendirilebilecekleri veya azaltılabilecekleri anlamına gelir.
  • Kullanım kolaylığı: Olay aracısı, olay yönlendirme ve depolama işlemlerini yönetir, karmaşık mantığı soyutlar ve verilerin kendisine odaklanmanızı sağlar.

Her olay, yalnızca olayın meydana gelmesiyle ilgili gerekli ayrıntıları içermelidir. Olay aracıları genellikle çok verimlidir ve olayların bir konuya kaydedildikten sonra sona ermemesi önerilse de, geleneksel bir veritabanı olarak değerlendirilmemelidir.

Örneğin, bir makalenin görüntülenme sayısının değiştiğini göstermek güzel olurdu, ancak bu bilgiyle birlikte tüm makaleyi ve meta verilerini depolamaya gerek yoktur. Bunun yerine, olay, harici bir veritabanındaki makale kimliğine bir referans içerebilir. Bu şekilde, gereksiz bilgiler eklemeden ve konuyu kirletmeden geçmiş yine de izlenebilir.

Şimdi Apache Kafka ve diğer popüler etkinlik aracılarını, bunların nasıl karşılaştırıldığını ve etkinlik akışı ekosistemine nasıl uyduğunu öğreneceksiniz.

Apache Kafka'nın rolü

Apache Kafka, Java dilinde yazılmış ve Apache Yazılım Vakfı tarafından yönetilen açık kaynaklı bir olay aracısıdır. Maksimum performans için özel bir TCP ağ protokolü kullanarak iletişim kuran dağıtılmış sunucular ve istemcilerden oluşur. Kafka son derece güvenilir ve ölçeklenebilirdir ve sanal makinelerde, yalın donanımlarda, kapsayıcılarda ve diğer bulut ortamlarında çalışabilir.

Güvenilirlik için Kafka, bir veya daha fazla sunucudan oluşan bir küme olarak dağıtılır. Bu küme, birden fazla bulut bölgesini ve veri merkezini kapsayabilir. Kafka kümeleri hata toleranslıdır; yani bir sunucu arızası veya bağlantı kesilmesi durumunda, kalanlar, harici etki ve veri kaybı olmadan işlemlerin yüksek düzeyde kullanılabilirliğini sağlamak için yeniden gruplandırılır.

Maksimum verimlilik için tüm Kafka sunucuları aynı rolü oynamaz. Bazı sunucular gruplandırılarak aracı görevi görür ve verileri depolamak için bir depolama katmanı oluşturur. Diğerleri ise mevcut sistemlerinizle entegre edilebilir ve mevcut sistemlerden (ilişkisel veritabanları gibi) Kafka'ya güvenilir bir şekilde veri akışı sağlayan bir araç olan Kafka Connect kullanılarak verileri olay akışları olarak alabilir.

Kafka, üreticileri ve tüketicileri müşteri olarak kabul eder. Daha önce açıklandığı gibi, üreticiler olayları bir Kafka aracısına yazar ve aracı da bunları ilgili tüketicilere gönderir. Varsayılan yapılandırmada Kafka, bir olayın nihayetinde tüketicilerden biri tarafından yalnızca bir kez işlenmesini garanti eder.

Kafka'da konular bölümlere ayrılmıştır. Bu, bir konunun farklı Kafka broker'ları arasında parçalara dağıtıldığı ve ölçeklenebilirliğin sağlandığı anlamına gelir. Kafka ayrıca, belirli bir konu ve bölüm kombinasyonunda depolanan olayların her zaman yazıldıkları sırayla okunabilmesini sağlar.

Bir konuyu yalnızca bölümlere ayırmanın yedekliliği garanti etmediğini unutmayın; yedeklilik yalnızca bölgeler ve veri merkezleri arasında çoğaltma yoluyla sağlanabilir. Bir üretim ortamında bir kümenin en az 3 kopyasının bulunması yaygındır; bu da her zaman üç konu-bölüm kombinasyonunun mevcut olduğu anlamına gelir.

Kafka entegrasyonu

Belirtildiği gibi, mevcut sistemlerinizden veriler Kafka Connect kullanılarak içe ve dışa aktarılabilir. Sunucularınızdaki tüm veritabanlarını, raporları veya ölçümleri düşük gecikmeli iş parçacıklarıyla içe aktarmak için uygundur. Kafka Connect, verileri standart bir şekilde yönetmenize olanak tanıyan farklı veri sistemleri için bağlayıcılar sağlar. Kendi çözümlerinizi kullanmak yerine bağlayıcıları kullanmanın bir diğer avantajı da Connect'in varsayılan olarak ölçeklenebilir olması (birden fazla çalışan gruplandırılabilir) ve ilerlemeyi otomatik olarak izlemesidir.

Uygulamalarınız aracılığıyla Kafka ile iletişim kurmak için çok sayıda istemci mevcuttur. Java, Scala, Python, .NET, C++, Go vb. gibi birçok programlama dili desteklenmektedir. Java ve Scala için Kafka Streams adlı üst düzey bir istemci kütüphanesi de mevcuttur. Bu kütüphane, iç işleyişi özetler ve bir Kafka sunucusuna kolayca bağlanıp yayın olaylarını almaya başlamanızı sağlar.

Sonuç

Bu makalede, veri ve olay işlemeye yönelik modern olay akışı yaklaşımının paradigmaları ve geleneksel veri kategorizasyon süreçlerine göre avantajları ele alınmaktadır. Ayrıca, bir olay aracısı olarak Apache Kafka ve istemci ekosistemi hakkında da bilgi edindiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz