Photo by John Duncan on Unsplash

Apache Kafka Kurulum, Spring Boot Kullanımı 2

Nesrin Asan
Kodcular
Published in
3 min readAug 16, 2021

--

Bir önceki yazımda Kafka’nın kurulumu ve topic takibi için tool paylaşımı üzerinde durmuştum. Bu yazımda ise küçük bir Spring Boot projesi açıp bir senaryo üzerinde örnek yapacağım.

Öncelikle senaryomuzu belirleyelim. Bir şirkete ait personel takip sistemi üzerinden çalışanlar yıllık izin tarihlerini girebiliyor. DB’ye izinler kayıt edildikten sonra bir kafka event’ı fırlatacağız. Bu event’ı bir consumer aracılığı ile yakalayıp ilgili yöneticilere anında mail atacağız. Kafka daha çok gerçek zamanlı uygulamalarda kullanım için çok rahatlatan bir yapı. Örnek olarak kullanıcı hareketlerini anlık loglayabilirsiniz,ya da cache’te tutulan verileri belli aralıklarla güncelleme işlemi yapmışızdır çoğumuz. Bu işlem için bir schedule kullanırız.Örnek vermek gerekirse 3 saatte bir cache’te bulunan listemin içeriğini DB’deki yeni verilerle güncelle. bazı 3 saatlerde DB’de veri güncellenmesi hiç olmamış olabilir. Bunun yerine DB’ye yapılan her save işlemi sonrası bir kafka event’ı fırlatır ve onu consume eden yapı’ya cache güncelleme görevi verebiliriz. Gibi örnekler çoğaltılabilir. Ancak şuan örnek olması açısından yukarıda bahsettiğim uygulamayı yapacağız.

Projeye ait dependency ve diğer bilgiler github hesabımda bulunmakta.

Kodun akışı ve mantığını inceleyelim;

Öncelikle çalışanın izin tarihlerini girebildiği API’mizi açıyoruz.

annualLeaveSave() methodu içerisinde çalışanın girdiği izin tarihi aralıklarını kaydediyoruz. ve hemen ardından arka tarafta yöneticilere mail atılması için bir event fırlatıyoruz.

Kafka event’ı fırlatan yapı producer yapısıdır. bir producerFactory() oluştursuktan sonra kafkaTemplate’e bu factory()’yi gösteriyoruz. ve event fırlarmak istediğimiz yerlerle kafkaTemplate() methodunu çağırıyoruz.

NOT: @Value olarak işaretlediğim değeleri application.properties üzerinden okuyoruz.

Kafkaya event’ımızı fırlattığımıza göre, bu event’ı okuyup gerekli işlemi gerçekleştirecek olan consumer yapımızı kurmamız gerekiyor.

Consumer yapısı için de bir configurasyon oluşturmamız gerekiyor öncelikle.

Configuration anotasyonu kullanarak spring içerisinde config işlemlerimi yapıyorum. methodları bean olarak tanımladıktan sonra artık istediğim yerde autowired olarak işaretleyip kullanabilecek duruma getirebilirim.

Ve son olarak mail gönderecek consume sınfımı oluşturuyorum.

Bir spring anotasyonu olan KafkaListener ile hangi topic’i dinlemek istiyorsam adını yukarıdaki gibi veriyorum. Consume edecek olan consumer’ın içerisinde bulunduğu groupId bilgisini de geçtikten sonra işlemim tamamlanmış olacaktır. GroupId bilgisi zorunludur. içerisinde consumer barındırır. bir groupId’ye bağlı birden fazla consumer olması paralel stream sağlayacağı için daha efektif olacaktır.

NOT: Kod içerisinde mail gönderme, save işlemleri fake olarak bulunmakta. Sadece kafka producer ve consumer yapılarına odaklanmak istedim.

https://github.com/Nesrinasan/KafkaPersonalTracking

--

--