---
# System prepended metadata

title: Database DML Event Handling

---


# Database DML Event Handling 

Bu belge ile veritabanı kayunaklı değişikler ile tetiklenen işlerin geliştirilmesi konusunda temel tasarım yaklaşımı oluşturulması hedeflenmiştir.

Veritabanı değişikleri örneklerine baktığımız da 
* Hesap açtığında
* Hesabına bloke konduğunda
* Gün içinde döviz aldığında
* Müşteri MOB onayı aldığında
* Müşteriye EFT geldiğinde

gibi değişiklikler sonucunda 

* İletişim amaçlı eylemlerin tetiklendiği 
* Bir iş akışının başlatıldığı
* Bir servisin cağrıldığı
* Bir veri tabanı güncellemesinin gerçekleştiği 

işlemler gerçekleştiğini görüyoruz. 

Bu işlemler çoğunlukla **Değişikliği yapan ekran ve servisler ile** veya **Veritabanını belli peryotlar ile sorgulayan zamanlanmış görevler** ile gerçekleştiriliyor. İlk yöntem iş mantığının katmanlar arasına dağılmasına neden olurken ikinci yöntemde ise veritabanı sık sık sorgulanarak veritabanı yükü arttırılıyor. 


## Queue(Kafka) Tabanlı **Event Aggregation**

### Senaryo
Yeni müşteri MOB onayı aldığında Kredi Kartı göndermek için kart gönderim akışının başlatılması gerekmektedir.

#### Çözüm
##### 1 - CDC 
Müşteri Tablosu tüm DML işlemleri için CDC ile KAFKA için tanım bir Topic üzerine aktarılır.
:::warning
Müşteri tablosu sadece bir defa CDC ile KAFKA üstüne taşınır. Birden fazla ihtiyaç için aynı topic farklı **Consumer Group** tanımları ile çağrılır.
:::

##### 2 - Event Topic 
Müşteri MOB onayı değişimi olduğunda **1.** aşamada elde edilen akıştan yeni bir topic kaydı oluşturulması sağlanır.
:::info
Var olan bir Topic kullanarak filtrelenmiş verilerle başka bir topic oluşturmak için Kafka Streams, kSQL veya Apache Flink kullanılabilir. 
:::

##### 3 - Uygulama 
Soruna özel olarak sorunu çözümü için ilgili Kafka topiğini dinleyip gereklilikleri yerine getiren proje geliştirilir ve kubernetes üstünme deploy edilir.


### Benzer Senaryolar
* Ticari bir müşterinin hesabına e-haciz blokesi konması durumunda müşterinin şubesine haber verilmesi gerekmektedir.
* Merkez bankasından para transferi ile ilgili bir iptal geldiğinde müşteriye push mesaj iletilmesi.


## Uygulama Özellikleri
* Kubernetes üzerinden çalışacak şekilde kodlanır.
* Azure DevOps pipeline ile Push yapıldığında test ortamlarına, onay aldığında production ortamlarına deploy edilir.
* Uygulama ELK APM ile entegre çalışır.
* Uygulama her zaman /healthcheck url sunar.
    * Kuyruk erişim sağlığı
    * Uygulamanın eriştiği diğer kaynaklara erişim sağlığı
* Uygulama kafka üzerinden bir topic tarafından iletilen message ile tetiklenen bir Background worker fonksiyonudur.
* Mesaj transactional olarak işlenir. İşlem başarılı olduğu durumda message read işlemi commit edilir.
* Uygulama içsel olarak gerçekleştirdiği işleri dışardan erişilebilir rest api olarak sunar. (*Geliştirilen işlemin belli durumlarda manuel tetiklenmesi gerebilir. Bu yüzden Business Logic ayrı bir şekilde servis olarak kodlanır.*)


---


> **Okumalıklar**
> [Kafka Terminoloji](https://medium.com/@ruwansriw/apache-kafka-terminology-f0b5350c26e4)
> [Kafka Error Handling](https://blogs.perficient.com/2021/02/15/kafka-consumer-error-handling-retry-and-recovery/)































