Event Driven Development & Kafka &Spring Boot — 1

Onur Aktaş
5 min readJun 24, 2024

--

Selamlar ! Bu yazımda Event Driven Development hakkında temel kavramları ve işleyişin nasıl gerçekleştiğine dair konuları işleyeceğim. Bir seri olarak hazırladığım bu yazıda ilerleyen yazılarda Kafka’nın temel yapılarını, nasıl çalıştığını işleyeceğim. Serinin son yazısında ise Kafka ve Spring Boot ile bir uygulama geliştirip adım adım bunun nasıl olduğunu anlatmaya çalışacağım. Bu yazı içerisinde göreceğiniz ana başlıklar şu şekilde ;

1- Event Driven Development (EDD) Nedir ?

2- Event Driven Development Temel Bileşenleri

3- Event Driven Architecture / EDA Nasıl Çalışır ?

4- Event Driven Architecture Kullanım Örnekleri

Şimdiden keyifli okumalar :)

1 — Event Driven Development (EDD) Nedir ?

Burada öncelikle Event Driven Architecture’ten (EDA) kısaca bahsetmem gerekiyor. Kavram olarak EDA ve EDD genellikle el ele giden birer kavramdır. EDA bir sistemdeki veri akışının ve kontrolün eventler tarafından belirlendiği bir yazılım mimari modelidir. EDD ise bahsettiğimiz bu eventlere yanıt olarak program içerisinde uygulanan belirli mantık ve işleyişi temsil eder.

Eventler sistemin içerisinde yada dışarısında gerçekleşen tetikleyici yapılardır. Bu tetikleyici yapılar sayesinde program önceden belirlenmiş klasik bir akışın aksine eventleri bekler ve bu eventlere göre tepki verir. EDD işlemlerin sırasıyla ilerlediği prosedürel bir programlama akışından farklılığı ile sisteme dinamik bir yapı katar. Çünkü EDD event ya da mesajlar ile etkileşime girer ve sistem içerisinde işleyiş bu değişikliklere göre şekillenir. EDD’nin ne olduğunu aslında burada söylemiş olduk. Herhangi bir eventin (olayın) gerçekleşmesi sonucu sistem içerisinde yapıların tetiklenerek bu evente karşı tepki vermesi ve programın genel olarak böyle geliştirilmesi durumuna Event Driven Development denir. EDD bizlere birçok avantaj sağlamaktadır. Öncelikle her konuda olduğu gibi EDD’de gereksinim duyulur ise programlamaya dahil edilmesi gereken bir yaklaşımdır. EDD async yapısı sayesinde bileşenlerin bağımsız olarak çalışmasını sağlar. Bu da sistem içerisinde Loose Coupling ve Flexibility (esneklik) sağlar. Bunlar harici, sistem adına bir avantajı da Scability yani ölçeklenebilirlik katmasıdır. Bizlere yaşatabileceği zorlukluklar da elbette vardır. Eventlerin ve bunlara tepki verecek yapıların sayısı arttıkça yönetmek karmaşık bir hal alabilir. Yani sistem açısında Complexity (karmaşıklık) durumunu artırabilir. Bahsedilen eventlerin işlem sırası da bir problem oluşturabilir. EDD içerisinde olayların doğru sıra ile handle edilmesini sağlamak çok önemlidir.

Temel kavramlar üzerine konuşmadan önce burada bir ayrımdan söz etmek doğru olacaktır. EDD açılımında da olduğu gibi eventlere dayalı bir yapıdır. Sık sık karıştırılan bir kavram bu noktada event ve mesajdır. Sistem içerisinde eventler harici mesajlar da bizim sistem bileşenlerimizi tetikleyebilir. Her iki kavram da aynı amaca hizmet eder. Diğer bileşenlerin tüketmesi için bilgi taşırlar. Ancak burada mesajın ve eventin gönderilme amacı fark yaratır. Eventler, sistemde meydana gelen durum değişikliklerini temsil eder ve genellikle diğer bileşenlerin bu değişikliklere tepki vermesini tetikler. Mesajlar, bir hizmetten başka bir hizmete iletilen istekleri veya komutları temsil eder. Bir mesaj bir hizmete bir eylem gerçekleştirmesini söyleyebilir (komut) veya bir hizmetten veri almayı isteyebilir (sorgu). Yani mesajlar sistemdeki farklı bileşenler arasında iletişim sağlar ve bir hizmetin diğer başka bir hizmetten istekte bulunmasını sağlar.

2- Event Driven Development Temel Bileşenleri

  • Event Source/Producer : Eventleri (olayları) oluşturan bileşen ve sistemdir. Bu kullanıcı arayüzü, sensörler, veri tabanları veya diğer harici sistemlerden biri olabilir.
  • Event : EDD için temel iletişim birimidir. Önemli olaylar veya durum değişikliklerini temsil eder. Even Source’lar tarafından oluşturulan parçacıklardır.
  • Event Broker / Event Bus : Eventlerin filtrelenmesi, dağıtımı ve yönlendirilmesi görevini yerine getirir.
  • Publisher : Eventleri üreten ve bunları Event Bus’a gönderen bir bileşendir.
  • Subscriber : Event Bus’da bulunan eventleri dinler ve buna göre yanıt verir. Dinledikleri eventler belirli türden ilgiyi ifade eder.
  • Event Handler : Oluşan eventlere nasıl yanıt verileceğini belirten yapılardır.
  • Dispatcher : Bazı sistemlerde eventleri uygun olan Event Handler’lara yönlendirmek için bir dağıtıcı kullanılır. Sistem içindeki event akışını yönetmeye yardımcı olur.
  • Aggregator : Birden fazla ilgili eventi daha anlamlı bir eventte toplamak için kullanılır. Bu bir çok aynı eventi ortaklaştırma işlemi ortaya çıkabilecek karmaşıklığı azaltmaya yardımcı olur.
  • Listener/Consumer : Event Bus’ta bulunan eventleri aktif olarak dinleye ve onlara tepki veren bir bileşendir. Listenerlar genellikle belirli event türleri ile ilişkilendirilir.
  • Command and Query : Eventlere yanıt olarak command (komutlar) veya query (sorgular) oluşturulabilir. Commandler eylemleri başlatırken, queryler eventin oluşmasına bağlı olarak bilgi talep edebilir.

3- Event Driven Architecture / EDD Nasıl Çalışır ?

Event bazlı bir sistemin çalışabilmesi için öncelikli olarak bu eventi oluşturan bir kaynağa ihtiyacımız vardır.Bunlar kullanıcı arayüzleri gibi bazı sistemler tarafından üretilir. Bu yapılara event source diyebiliriz. Temel amacımız bir uygulamanın durumundaki her değişikliğin bir event nesnesinde yakalanmasını sağlamak ve bu event nesnelerinin uygulama durumuyla aynı yaşam süresi içerisinde ve uygulandıkları sıra ile saklanmasını daha sonra ise işlenmesini sağlamaktır. Burada önemli birkaç noktadan bahsetmekte fayda var. Eventi gönderen mantık akışı ile evente cevap veren akış arasında belirgin bir ayrım olmalı. Bu ayrımın gerekliliği event sisteminin yönetebilmek adına önemlidir. Bir diğer önemli nokta ise eventler üzerinde çok fazla veri taşımamak gerektiğidir. Alıcı bir şeylerin (örneğin, bir sipariş durumunun değişmesi) değiştiğini bilir, değişiklik hakkında çok az bilgi alabilir. Ancak daha sonra ne yapacağına karar vermek için eventi gönderen yapıya bir talepte bulunur.

Bu yazı içerisinde Event Driven Architecture’ın nasıl çalıştığını daha kaba bir şekilde açıklayacağım. Serinin ilerleyen yazılarında Kafka’nın nasıl çalıştığını açıklarken daha detaylı bir açıklama yapacağım.

EDA aslında üç ana yapı üzerinde akışı sağlar; producer, broker ve consumer. Producer tarafından üretilen eventler, Event Brokerlar tarafından yönlendirilerek Event Consumerlar’a iletilir. Consumerlar kendisi ile ilgili Eventleri handle ederek gerekli aksiyonların alınmasını sağlar. Bu akış içerisinde daha önce bahsettiğimiz gibi Event’i oluşturan ve yayınlayan yapılar (producer) ve bu eventleri dinleyip tetiklenen — aksiyon alan yapılar arasında fark edilen bir ayrım vardır. Producer eventleri publish ettikten sonrasında consumerların bu eventi yakalayıp yakalamadığına bir aksiyon alıp almadığı ile ilgilenmez. Consumerlar da aynı şekilde eventleri yakaladıktan sonra producerlara feed-back vermezler. Ya da bir başka tabirler Producer’un eventleri üretmesi olayı consumerların işlemlerine bağlı değildir. Bunun tam tersi de doğrudur.

4- Event Driven Architecture Kullanım Örnekleri

EDA sağladığı birçok avantaj ile modern sistemlerde sıklıkla kullanılır. Bu kullanım alanlarını 4 başlık altında toplaycak olursak;

  • Real-time data processing : Bu sistemler sürekli bir giriş, sürekli işlem ve verilerin istikrarlı çıktısını gerektirir. Banka ATM leri , radar sistemleri, müşteri hizmetleri sistemleri bunlara örnek olarak verilebilir.
  • Microservices-based sistemler : Mikro servis tabanlı yapılarda servisler arası iletişim gerekli olabilir. Bu iletişimi EDA sayesinde gerçekleştirebiliriz.
  • IoT (Nesnelerin İnterneti) uygulamaları : Türkçeye nesnelerin interneti olarak da çevrilen bu sistemler, fiziksel nesnelerin birbiriyle veya başka sistemlerle iletişim halinde olması ile öne çıkar. Bu sistemler arası veya kendi içlerinde kurulan iletişimde EDA önemli bir yere sahiptir.
  • Yüksek düzeyde eşzamanlılık ve yanıt verme gerektiren sistemler.

Okuduğunuz için teşekkür ederim. Diğer yazılarda görüşmek üzere !

Beni Linkedln’ dan takip edebilirsiniz.

--

--