https://github.com/ahmetfurkandemir/sahibinden-data-engineering-technical-case-study
Sahibinden.com Data Engineering Technical Case Study
https://github.com/ahmetfurkandemir/sahibinden-data-engineering-technical-case-study
case-study data data-engineering debezium docker flink kafka mongodb mysql pyflink pyspark python sahibinden spark
Last synced: 6 months ago
JSON representation
Sahibinden.com Data Engineering Technical Case Study
- Host: GitHub
- URL: https://github.com/ahmetfurkandemir/sahibinden-data-engineering-technical-case-study
- Owner: AhmetFurkanDEMIR
- Created: 2025-02-14T07:46:36.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-03-10T08:36:56.000Z (7 months ago)
- Last Synced: 2025-04-30T19:04:12.809Z (6 months ago)
- Topics: case-study, data, data-engineering, debezium, docker, flink, kafka, mongodb, mysql, pyflink, pyspark, python, sahibinden, spark
- Language: Python
- Homepage:
- Size: 2.89 MB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Sahibinden-Data-Engineering-Technical-Case-Study
### **Proje hakkında**
Bu Proje [Sahibinden.com](https://sahibinden.com/) Data engineer Case çalışmasıdır. Orjinal Case çalışma [dokümanı](/Senior_Data_Enginer_Ankara_Case.doc)
Projedeki açıklamalar ve işlemler README.md dosyasına yazılmıştır. Görüntü ve daha iyi bir gösterim için bu dosyaları Visual Studio Code üzerinden görüntüleyebilirsiniz.
### **Gereklilikler**

Uygulamaların çalışacağı cihazda docker ve docker compose kurulu olması gerekmektedir.
[Kurulum linki (Ubuntu için)](https://docs.docker.com/engine/install/ubuntu/)
[Kurulum linki (Windows için)](https://docs.docker.com/desktop/setup/install/windows-install/)
Docker'ı kullanmamın sebebi, Case çalışmasını çalıştıracak kişinin bilgisayarında sorunsuz bir şekilde çalışmasını sağlamaktır. Hem platform bağımsız olarak hatasız çalışmasını sağlamak hem de yazılan uygulamaların daha sonrasında Docker Swarm ve Kubernetes üzerinde deploy edilmesini kolaylaştırmaktır.
Yazılan tüm kodlar ve servisler, otomatik olarak Docker ile deploy edilecek şekilde yapılandırılmıştır. Proje, çalışırken insan faktörünü minimize ederek hata oranını azaltmayı hedeflemektedir.
## 1-) [MySQL ve Debezium](/MySQL_Debezium/)

[**1.a.**](/MySQL_Debezium/) Localinizde kuracağınız bir mysqli debezium mysql connector ile dinleyip, mysql loglarını kafka topicslerinde gösterecek şekilde bir akış oluşturur musunuz?
[**1.b.**](/MySQL_Debezium/) Buradaki kafka topiclerinde girilen mysql-debezium mesajlarını bir structured DB'ye nasıl upset/merge etmeyi düşünürsünüz, kırılma yaşayacabileceğimiz noktalar nereleri olur, çözüm yaklaşımlarınızı paylaşabilir misiniz? Sözel/text cevap veriniz.
## 2-) [Spark ve MongoDB](/Spark_MongoDB/)

[**2.a.**](/Spark_MongoDB/) Spark ile mongo dbden veri okuyup yazma:
```sql
CREATE TABLE collection1 (
a bigint,
b bigint,
c array(ROW(c1 varchar, c2 bigint))
);
```formatında bir collectiondan 1 satır veri okuyup (c kolonunda 3 rows item olduğunu düşünelim), structured bir dbye
```sql
CREATE TABLE sql_table(
a int,
b int,
c_c1 varchar,
c_c2 int
);
```şeklinde bir tabloya 3 satır olarak insert edebilir misiniz?
[**2.b.**](/Spark_MongoDB/) Burada 500M'luk bir veri seti olsaydı, bu Spark jobını hangi ortamda nasıl çalıştırırdınız, yaklaşımınız ne olurdu? Sözel/text cevap veriniz.
## 3-) [Flink ve Kafka](/Flink_Kafka/)

[**3.a.**](/Flink_Kafka/) Apache Flink ile Kafka entegrasyonu yapıp, Kafka'dan JSON veri okuyup bu veriyi bazı hesaplamalar yaptıktan sonra 2 dakikada bir sonucu local dosya sistemine csv olarak yazan pipeline oluşturun, örnek implementasyon yapar mısınız?
[**3.b.**](/Flink_Kafka/) Çok yüklü ama gün içinde dalgalan sıklıkta veri akışı olan bir akışta; zaman ve adet bazlı yazma politikanız nasıl olurdu. Çıkabilkecek ne tür senaryolar olurdu, hangi konfigüsayonlarla yönetirdiniz?