{"id":36232,"date":"2025-12-11T00:22:40","date_gmt":"2025-12-10T21:22:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/"},"modified":"2025-12-11T00:22:40","modified_gmt":"2025-12-10T21:22:40","slug":"kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/","title":{"rendered":"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?"},"content":{"rendered":"<p><title>DigitalOcean \u00dczerinde Kafka Schema Registry ile Veri Tutarl\u0131l\u0131\u011f\u0131 Nas\u0131l Sa\u011flan\u0131r?<\/title><br \/>\n<body><\/p>\n<style>\n    \/* Genel stil tan\u0131mlamalar\u0131 *\/\n    body {\n      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n      line-height: 1.6;\n      color: #333;\n      margin: 0 auto;\n      padding: 20px;\n      max-width: 1000px;\n      background-color: #f9f9f9;\n    }<\/p>\n<p>    h2 {\n      color: #2c3e50;\n      border-bottom: 2px solid #3498db;\n      padding-bottom: 10px;\n      margin-top: 40px;\n    }<\/p>\n<p>    h3 {\n      color: #34495e;\n      margin-top: 30px;\n    }<\/p>\n<p>    p {\n      margin-bottom: 1em;\n    }<\/p>\n<p>    ul, ol {\n      margin-bottom: 1em;\n      padding-left: 20px;\n    }<\/p>\n<p>    li {\n      margin-bottom: 0.5em;\n    }<\/p>\n<p>    pre {\n      background-color: #ecf0f1;\n      border: 1px solid #bdc3c7;\n      padding: 15px;\n      border-radius: 5px;\n      overflow-x: auto;\n      margin-bottom: 1.5em;\n    }<\/p>\n<p>    code {\n      font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;\n      font-size: 0.9em;\n      color: #27ae60;\n    }<\/p>\n<p>    pre code {\n      color: #34495e;\n    }<\/p>\n<p>    .expert-tip {\n      background-color: #e8f6f3;\n      border-left: 5px solid #1abc9c;\n      padding: 15px;\n      margin: 20px 0;\n      border-radius: 5px;\n      font-style: italic;\n      color: #2c3e50;\n    }<\/p>\n<p>    table {\n      width: 100%;\n      border-collapse: collapse;\n      margin: 20px 0;\n    }<\/p>\n<p>    th, td {\n      border: 1px solid #ddd;\n      padding: 10px;\n      text-align: left;\n    }<\/p>\n<p>    th {\n      background-color: #3498db;\n      color: white;\n    }<\/p>\n<p>    \/* Mobil uyumluluk i\u00e7in medya sorgular\u0131 *\/\n    @media (max-width: 768px) {\n      body {\n        padding: 15px;\n      }<\/p>\n<p>      h2 {\n        font-size: 1.8em;\n      }<\/p>\n<p>      h3 {\n        font-size: 1.3em;\n      }<\/p>\n<p>      table, thead, tbody, th, td, tr {\n        display: block;\n      }<\/p>\n<p>      thead tr {\n        position: absolute;\n        top: -9999px;\n        left: -9999px;\n      }<\/p>\n<p>      tr {\n        border: 1px solid #ccc;\n        margin-bottom: 10px;\n      }<\/p>\n<p>      td {\n        border: none;\n        border-bottom: 1px solid #eee;\n        position: relative;\n        padding-left: 50%;\n        text-align: right;\n      }<\/p>\n<p>      td:before {\n        position: absolute;\n        top: 6px;\n        left: 6px;\n        width: 45%;\n        padding-right: 10px;\n        white-space: nowrap;\n        text-align: left;\n        font-weight: bold;\n      }<\/p>\n<p>      \/* \u00d6rnek: \u0130lk s\u00fctun ba\u015fl\u0131\u011f\u0131n\u0131 her sat\u0131rda g\u00f6sterme *\/\n      td:nth-of-type(1):before { content: \"\u00d6zellik\"; }\n      td:nth-of-type(2):before { content: \"A\u00e7\u0131klama\"; }\n    }\n  <\/style>\n<p>Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis mimarileri ve olay tabanl\u0131 sistemlerle \u00e7al\u0131\u015f\u0131rken karma\u015f\u0131k bir meydan okumad\u0131r. Peki, Kafka gibi g\u00fc\u00e7l\u00fc bir mesajla\u015fma platformunu kullan\u0131rken veri \u015femalar\u0131n\u0131z\u0131n evrimini nas\u0131l y\u00f6netir, farkl\u0131 servisler aras\u0131nda veri uyumsuzluklar\u0131n\u0131 nas\u0131l \u00f6nlersiniz? Bu makalede, DigitalOcean \u00fczerinde Kafka Schema Registry&#8217;yi ad\u0131m ad\u0131m kurarak ve kullanarak bu sorulara yan\u0131t bulaca\u011f\u0131z.<\/p>\n<h2>Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?<\/h2>\n<p>Da\u011f\u0131t\u0131k sistemlerde, \u00f6zellikle de olay tabanl\u0131 mimarilerde, farkl\u0131 mikroservisler aras\u0131nda veri al\u0131\u015fveri\u015fi kritik bir \u00f6neme sahiptir. Bu veri al\u0131\u015fveri\u015fi genellikle Kafka gibi mesaj kuyruklar\u0131 arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015fir. Ancak bu mesajlar\u0131n format\u0131 zamanla de\u011fi\u015febilir; yeni alanlar eklenebilir, mevcut alanlar kald\u0131r\u0131labilir veya veri tipleri g\u00fcncellenebilir. \u0130\u015fte tam da bu noktada, veri uyumsuzluklar\u0131 ve hatalar ba\u015f g\u00f6stermeye ba\u015flar. Bir servis eski bir formatta veri g\u00f6nderirken, ba\u015fka bir servis yeni format\u0131 bekleyebilir ve bu durum sistem genelinde ciddi sorunlara yol a\u00e7abilir. Bu karma\u015fay\u0131 \u00e7\u00f6zmek ve veri tutarl\u0131l\u0131\u011f\u0131n\u0131 garanti alt\u0131na almak i\u00e7in Kafka Schema Registry devreye girer.<\/p>\n<p>Kafka Schema Registry, Kafka&#8217;da \u00fcretilen ve t\u00fcketilen mesajlar\u0131n \u015femalar\u0131n\u0131 (yap\u0131lar\u0131n\u0131) merkezi bir yerde y\u00f6neten bir depodur. Temel amac\u0131, veri \u00fcreticileri ve t\u00fcketicileri aras\u0131nda veri format\u0131 uyumlulu\u011funu sa\u011flamak ve veri evrimini kontroll\u00fc bir \u015fekilde y\u00f6netmektir. Genellikle Avro, Protobuf veya JSON Schema gibi serile\u015ftirme formatlar\u0131yla birlikte kullan\u0131l\u0131r. Bu formatlar, veriyi kompakt ve h\u0131zl\u0131 bir \u015fekilde serile\u015ftirmekle kalmaz, ayn\u0131 zamanda \u015fema tan\u0131m\u0131yla birlikte gelirler. Schema Registry, bu \u015femalar\u0131 saklar ve her bir Kafka konusuna (topic) kar\u015f\u0131l\u0131k gelen \u015fema s\u00fcr\u00fcmlerini takip eder.<\/p>\n<p>Schema Registry&#8217;nin sa\u011flad\u0131\u011f\u0131 temel faydalar \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Veri Tutarl\u0131l\u0131\u011f\u0131 ve G\u00fcvenli\u011fi:<\/strong> \u00dcreticiler, mesajlar\u0131n\u0131 g\u00f6ndermeden \u00f6nce \u015femaya uygun olup olmad\u0131\u011f\u0131n\u0131 kontrol edebilir. T\u00fcketiciler ise ald\u0131klar\u0131 mesajlar\u0131n hangi \u015femaya ait oldu\u011funu bilerek do\u011fru \u015fekilde deserile\u015ftirebilir. Bu, hatal\u0131 veya uyumsuz verinin sisteme girmesini engeller.<\/li>\n<li><strong>\u015eema Evrimi Y\u00f6netimi:<\/strong> Uygulamalar geli\u015ftik\u00e7e veri \u015femalar\u0131 da evrimle\u015fir. Schema Registry, \u015fema de\u011fi\u015fikliklerini (yeni alan ekleme, alan kald\u0131rma vb.) belirli uyumluluk kurallar\u0131na g\u00f6re y\u00f6netir. Bu sayede, eski ve yeni versiyonlar aras\u0131nda sorunsuz bir ge\u00e7i\u015f sa\u011flan\u0131r.<\/li>\n<li><strong>Performans \u0130yile\u015ftirmesi:<\/strong> Avro gibi ikili serile\u015ftirme formatlar\u0131, JSON veya XML&#8217;e g\u00f6re daha az yer kaplar ve daha h\u0131zl\u0131 i\u015flenir. Schema Registry, \u015fema kimliklerini kullanarak mesaj boyutunu k\u00fc\u00e7\u00fclt\u00fcr, \u00e7\u00fcnk\u00fc \u015fema tan\u0131m\u0131n\u0131 her mesaja dahil etmek yerine sadece \u015fema kimli\u011fini g\u00f6nderir.<\/li>\n<li><strong>Merkezi Y\u00f6netim:<\/strong> T\u00fcm \u015femalar\u0131n tek bir merkezi yerde depolanmas\u0131, geli\u015ftiricilerin hangi \u015femalar\u0131n mevcut oldu\u011funu ve nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 kolayca g\u00f6rmesini sa\u011flar. Bu, dok\u00fcmantasyonu basitle\u015ftirir ve geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/li>\n<li><strong>Dil Ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131:<\/strong> Farkl\u0131 programlama dilleriyle yaz\u0131lm\u0131\u015f servisler, ayn\u0131 \u015femay\u0131 kullanarak uyumlu bir \u015fekilde veri al\u0131\u015fveri\u015fi yapabilir.<\/li>\n<\/ul>\n<p>\u00d6zetle, Kafka Schema Registry, modern veri odakl\u0131 uygulamalar i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Veri uyumsuzluklar\u0131ndan kaynaklanan sorunlar\u0131 ortadan kald\u0131rarak geli\u015ftirme s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r, sistem kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r ve uzun vadede bak\u0131m maliyetlerini d\u00fc\u015f\u00fcr\u00fcr. DigitalOcean gibi bulut platformlar\u0131nda \u00e7al\u0131\u015f\u0131rken, bu merkezi y\u00f6netim ve tutarl\u0131l\u0131k katman\u0131, da\u011f\u0131t\u0131k sistemlerinizin sa\u011fl\u0131\u011f\u0131 i\u00e7in hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<h2>DigitalOcean&#8217;da Bir Kafka Ortam\u0131 Nas\u0131l Kurulur?<\/h2>\n<p>DigitalOcean \u00fczerinde bir Kafka ortam\u0131 kurman\u0131n birka\u00e7 yolu vard\u0131r. En yayg\u0131n ve \u00f6nerilen y\u00f6ntem, DigitalOcean&#8217;\u0131n Managed Kafka hizmetini kullanmakt\u0131r. Bu hizmet, Kafka k\u00fcmesinin kurulumu, y\u00f6netimi ve \u00f6l\u00e7eklenmesi gibi karma\u015f\u0131k operasyonel g\u00f6revleri sizin yerinize \u00fcstlenir. Ancak, daha fazla kontrol veya \u00f6zel yap\u0131land\u0131rma gerektiren durumlar i\u00e7in bir Droplet (sanal sunucu) \u00fczerine manuel kurulum da m\u00fcmk\u00fcnd\u00fcr. Bu makalede, hem Managed Kafka&#8217;n\u0131n sundu\u011fu kolayl\u0131klara de\u011finecek hem de manuel kurulum i\u00e7in temel ad\u0131mlar\u0131 \u00f6zetleyece\u011fiz.<\/p>\n<h3>DigitalOcean Managed Kafka ile Kolay Kurulum<\/h3>\n<p>DigitalOcean Managed Kafka, tam olarak y\u00f6netilen bir hizmettir ve Zookeeper, Kafka broker&#8217;lar\u0131 gibi t\u00fcm bile\u015fenleri sizin i\u00e7in otomatik olarak ayarlar ve y\u00f6netir. Bu, \u00f6zellikle operasyonel y\u00fck\u00fc azaltmak isteyen ekipler i\u00e7in idealdir.<\/p>\n<ol>\n<li><strong>Hesap Olu\u015fturma ve Giri\u015f:<\/strong> DigitalOcean hesab\u0131n\u0131za giri\u015f yap\u0131n. E\u011fer yoksa, kolayca bir hesap olu\u015fturabilirsiniz.<\/li>\n<li><strong>Yeni Veritaban\u0131 K\u00fcmesi Olu\u015fturma:<\/strong> Kontrol panelinde sol men\u00fcden &#8220;Databases&#8221; (Veritabanlar\u0131) se\u00e7ene\u011fine t\u0131klay\u0131n. Ard\u0131ndan &#8220;Create a Database Cluster&#8221; (Veritaban\u0131 K\u00fcmesi Olu\u015ftur) butonuna bas\u0131n.<\/li>\n<li><strong>Kafka Se\u00e7imi:<\/strong> Veritaban\u0131 tipi olarak &#8220;Kafka&#8221;y\u0131 se\u00e7in.<\/li>\n<li><strong>Plan ve B\u00f6lge Se\u00e7imi:<\/strong> \u0130htiya\u00e7lar\u0131n\u0131za uygun bir Kafka plan\u0131 (geli\u015ftirme, \u00fcretim vb.) ve co\u011frafi b\u00f6lge (\u00f6rne\u011fin, Frankfurt, Amsterdam) se\u00e7in. B\u00f6lge se\u00e7imi, uygulaman\u0131z\u0131n konumuna yak\u0131n olmal\u0131 ve gecikmeyi en aza indirmelidir.<\/li>\n<li><strong>K\u00fcme Yap\u0131land\u0131rmas\u0131:<\/strong> K\u00fcmenizin ad\u0131n\u0131 belirleyin ve isterseniz etiketler ekleyin. Ayr\u0131ca, hangi VPC a\u011f\u0131na (e\u011fer kullan\u0131yorsan\u0131z) ba\u011flanaca\u011f\u0131n\u0131 da se\u00e7ebilirsiniz.<\/li>\n<li><strong>Olu\u015fturma:<\/strong> &#8220;Create a Database Cluster&#8221; butonuna t\u0131klayarak Kafka k\u00fcmenizi olu\u015fturun. Bu i\u015flem birka\u00e7 dakika s\u00fcrebilir.<\/li>\n<\/ol>\n<p>K\u00fcme olu\u015fturulduktan sonra, ba\u011flant\u0131 detaylar\u0131n\u0131za (broker adresleri, kullan\u0131c\u0131 ad\u0131, \u015fifre, CA sertifikas\u0131) eri\u015febilirsiniz. Bu bilgiler, Kafka \u00fcreticilerinizi ve t\u00fcketicilerinizi yap\u0131land\u0131rmak i\u00e7in kullan\u0131lacakt\u0131r. Managed Kafka ile kurulum, altyap\u0131 y\u00f6netimiyle u\u011fra\u015fmadan do\u011frudan Kafka uygulamalar\u0131n\u0131za odaklanman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Droplet \u00dczerinde Manuel Kafka Kurulumu (K\u0131sa \u00d6zet)<\/h3>\n<p>E\u011fer Managed Kafka kullanmak istemiyorsan\u0131z, bir DigitalOcean Droplet&#8217;i \u00fczerine manuel olarak Kafka kurabilirsiniz. Bu y\u00f6ntem daha fazla esneklik sunar ancak operasyonel sorumlulu\u011fu art\u0131r\u0131r. \u0130\u015fte temel ad\u0131mlar:<\/p>\n<ol>\n<li><strong>Droplet Olu\u015fturma:<\/strong> DigitalOcean kontrol panelinden bir Ubuntu Droplet&#8217;i olu\u015fturun (minimum 2GB RAM \u00f6nerilir). SSH ile Droplet&#8217;e ba\u011flan\u0131n.<\/li>\n<li><strong>Java Kurulumu:<\/strong> Kafka Java tabanl\u0131 oldu\u011fu i\u00e7in OpenJDK kurman\u0131z gerekir.\n<pre><code>\nsudo apt update\nsudo apt install openjdk-11-jdk -y\n      <\/code><\/pre>\n<\/li>\n<li><strong>Kafka \u0130ndirme ve \u00c7\u0131karma:<\/strong> Apache Kafka&#8217;n\u0131n en son stabil s\u00fcr\u00fcm\u00fcn\u00fc indirin ve s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f dosyay\u0131 \u00e7\u0131kar\u0131n.\n<pre><code>\nwget https:\/\/downloads.apache.org\/kafka\/3.6.1\/kafka_2.13-3.6.1.tgz\ntar -xzf kafka_2.13-3.6.1.tgz\nmv kafka_2.13-3.6.1 \/opt\/kafka\n      <\/code><\/pre>\n<\/li>\n<li><strong>Zookeeper ve Kafka Ba\u015flatma:<\/strong> Kafka, Zookeeper&#8217;a ba\u011f\u0131ml\u0131d\u0131r. \u00d6nce Zookeeper&#8217;\u0131, sonra Kafka broker&#8217;\u0131n\u0131 ba\u015flat\u0131n.\n<pre><code>\n\/opt\/kafka\/bin\/zookeeper-server-start.sh -daemon \/opt\/kafka\/config\/zookeeper.properties\n\/opt\/kafka\/bin\/kafka-server-start.sh -daemon \/opt\/kafka\/config\/server.properties\n      <\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar, basit bir tek d\u00fc\u011f\u00fcml\u00fc Kafka kurulumu i\u00e7in yeterlidir. \u00dcretim ortamlar\u0131 i\u00e7in \u00e7oklu broker&#8217;l\u0131, y\u00fcksek eri\u015filebilirli\u011fe sahip bir k\u00fcme yap\u0131land\u0131rmas\u0131 ve sistemd servisleri ile otomatik ba\u015flatma gibi ek ad\u0131mlar gerekecektir. Her iki durumda da, Kafka ortam\u0131n\u0131z haz\u0131r oldu\u011funda, Schema Registry&#8217;yi entegre etmeye ge\u00e7ebiliriz.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: \u00dcretim ortamlar\u0131 i\u00e7in her zaman DigitalOcean Managed Kafka gibi y\u00f6netilen hizmetleri tercih edin. Bu, altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc hafifletir ve ekibinize as\u0131l i\u015flerine odaklanma imkan\u0131 sunar. Maliyet-fayda analizi yaparken operasyonel maliyetleri de g\u00f6z \u00f6n\u00fcnde bulundurun.\n  <\/div>\n<h2>Schema Registry&#8217;yi DigitalOcean \u00dczerinde Nas\u0131l Konumland\u0131r\u0131r\u0131z?<\/h2>\n<p>Kafka Schema Registry&#8217;yi DigitalOcean \u00fczerinde konumland\u0131rmak, genellikle bir Droplet \u00fczerine Docker veya manuel kurulum yoluyla ger\u00e7ekle\u015ftirilir. Managed Kafka hizmeti Schema Registry&#8217;yi do\u011frudan i\u00e7ermedi\u011fi i\u00e7in, onu ayr\u0131 bir servis olarak \u00e7al\u0131\u015ft\u0131rman\u0131z gerekecektir. En esnek ve modern yakla\u015f\u0131m, Docker kullanarak Schema Registry&#8217;yi da\u011f\u0131tmakt\u0131r. Bu b\u00f6l\u00fcm, Docker Compose ile h\u0131zl\u0131 bir kurulumu ve temel yap\u0131land\u0131rmay\u0131 kapsayacakt\u0131r.<\/p>\n<h3>Docker Compose ile Schema Registry Kurulumu<\/h3>\n<p>Docker Compose, birden fazla Docker container&#8217;\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7t\u0131r. Schema Registry&#8217;yi, Kafka broker&#8217;lar\u0131n\u0131zla birlikte veya ayr\u0131 bir Droplet \u00fczerinde \u00e7al\u0131\u015ft\u0131rmak i\u00e7in idealdir. A\u015fa\u011f\u0131daki ad\u0131mlar, temel bir kurulumu g\u00f6stermektedir.<\/p>\n<ol>\n<li><strong>Droplet Olu\u015fturma ve Docker Kurulumu:<\/strong> DigitalOcean&#8217;da bir Ubuntu Droplet&#8217;i olu\u015fturun. Bu Droplet, Schema Registry&#8217;yi bar\u0131nd\u0131racak. Droplet&#8217;e SSH ile ba\u011fland\u0131ktan sonra Docker ve Docker Compose&#8217;u kurun:\n<pre><code>\nsudo apt update\nsudo apt install apt-transport-https ca-certificates curl software-properties-common -y\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg\necho \"deb [arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/ubuntu $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\nsudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io -y\nsudo usermod -aG docker ${USER} # Kullan\u0131c\u0131y\u0131 docker grubuna ekle\nnewgrp docker # Grubun aktif olmas\u0131 i\u00e7in\nsudo apt install docker-compose -y\n      <\/code><\/pre>\n<\/li>\n<li><strong>Docker Compose Dosyas\u0131 Olu\u015fturma:<\/strong> Bir metin edit\u00f6r\u00fc kullanarak (\u00f6rne\u011fin <code>nano<\/code>) <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun:\n<pre><code>\nnano docker-compose.yml\n      <\/code><\/pre>\n<p>      \u0130\u00e7eri\u011fi a\u015fa\u011f\u0131daki gibi doldurun. Burada Confluent&#8217;in resmi Schema Registry Docker imaj\u0131n\u0131 kullan\u0131yoruz.<\/p>\n<pre><code class=\"language-yaml\">\nversion: '3.8'\nservices:\n  schema-registry:\n    image: confluentinc\/cp-schema-registry:7.5.0 # En son stabil s\u00fcr\u00fcm\u00fc kontrol edin\n    hostname: schema-registry\n    container_name: schema-registry\n    ports:\n      - \"8081:8081\" # Schema Registry API portu\n    environment:\n      # Kafka broker adresleri. E\u011fer DigitalOcean Managed Kafka kullan\u0131yorsan\u0131z, buraya ba\u011flant\u0131 dizesini ekleyin.\n      # \u00d6rnek: broker1:9092,broker2:9092\n      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: \"PLAINTEXT:\/\/your-kafka-broker-ip:9092\" \n      SCHEMA_REGISTRY_HOST_NAME: schema-registry\n      SCHEMA_REGISTRY_LISTENERS: \"http:\/\/0.0.0.0:8081\"\n      # E\u011fer Managed Kafka kullan\u0131yorsan\u0131z ve SSL\/TLS gerekiyorsa ek ayarlar\n      # SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: SSL\n      # SCHEMA_REGISTRY_KAFKASTORE_SSL_TRUSTSTORE_LOCATION: \/etc\/kafka\/secrets\/truststore.jks\n      # SCHEMA_REGISTRY_KAFKASTORE_SSL_TRUSTSTORE_PASSWORD: your_truststore_password\n      # SCHEMA_REGISTRY_KAFKASTORE_SSL_KEYSTORE_LOCATION: \/etc\/kafka\/secrets\/keystore.jks\n      # SCHEMA_REGISTRY_KAFKASTORE_SSL_KEYSTORE_PASSWORD: your_keystore_password\n      # SCHEMA_REGISTRY_KAFKASTORE_SSL_KEY_PASSWORD: your_key_password\n      # E\u011fer kimlik do\u011frulama gerekiyorsa (SASL_SSL)\n      # SCHEMA_REGISTRY_KAFKASTORE_SASL_MECHANISM: PLAIN\n      # SCHEMA_REGISTRY_KAFKASTORE_SASL_JAAS_CONFIG: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"your_username\\\" password=\\\"your_password\\\";\"\n    networks:\n      - kafka-net # E\u011fer Kafka broker'\u0131n\u0131z ayn\u0131 Docker a\u011f\u0131ndaysa\nnetworks:\n  kafka-net:\n    driver: bridge\n      <\/code><\/pre>\n<p><strong>\u00d6nemli Not:<\/strong> <code>SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS<\/code> k\u0131sm\u0131n\u0131 kendi Kafka broker adreslerinizle g\u00fcncellemeyi unutmay\u0131n. E\u011fer DigitalOcean Managed Kafka kullan\u0131yorsan\u0131z, ba\u011flant\u0131 dizenizdeki t\u00fcm broker&#8217;lar\u0131 ve portlar\u0131n\u0131 buraya eklemelisiniz. Ayr\u0131ca, Managed Kafka genellikle SSL\/TLS ve SASL kimlik do\u011frulamas\u0131 gerektirir. Bu durumda, yukar\u0131daki yorum sat\u0131r\u0131ndaki ilgili ayarlar\u0131 yap\u0131land\u0131rman\u0131z ve gerekli sertifika\/anahtar dosyalar\u0131n\u0131 Docker container&#8217;\u0131na bind mount etmeniz gerekebilir.<\/p>\n<\/li>\n<li><strong>Schema Registry&#8217;yi Ba\u015flatma:<\/strong> <code>docker-compose.yml<\/code> dosyas\u0131n\u0131 kaydettikten sonra, ayn\u0131 dizinde a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak Schema Registry&#8217;yi ba\u015flat\u0131n:\n<pre><code>\ndocker-compose up -d\n      <\/code><\/pre>\n<p>      <code>-d<\/code> bayra\u011f\u0131, container&#8217;\u0131 arka planda \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flar.\n    <\/li>\n<li><strong>Durumu Kontrol Etme:<\/strong> Schema Registry&#8217;nin ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulamak i\u00e7in:\n<pre><code>\ndocker ps\n      <\/code><\/pre>\n<p>      veya loglar\u0131 kontrol edebilirsiniz:<\/p>\n<pre><code>\ndocker logs schema-registry\n      <\/code><\/pre>\n<p>      Ayr\u0131ca, Droplet&#8217;inizin genel IP adresinden 8081 portuna bir cURL iste\u011fi g\u00f6ndererek API&#8217;nin yan\u0131t verip vermedi\u011fini test edebilirsiniz:<\/p>\n<pre><code>\ncurl -X GET http:\/\/your_droplet_ip:8081\/subjects\n      <\/code><\/pre>\n<p>      Bo\u015f bir dizi (<code>[]<\/code>) veya hata mesaj\u0131 alman\u0131z beklenir, bu da Schema Registry&#8217;nin \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.\n    <\/li>\n<\/ol>\n<p>Bu kurulumla birlikte, Kafka Schema Registry&#8217;niz art\u0131k DigitalOcean Droplet&#8217;inizde \u00e7al\u0131\u015f\u0131r durumda. Bir sonraki ad\u0131m, \u015femalar\u0131 tan\u0131mlamak ve uygulamalar\u0131n\u0131zla entegre etmektir.<\/p>\n<h2>Veri \u015eemalar\u0131 Nas\u0131l Tan\u0131mlan\u0131r ve Y\u00f6netilir? (Uygulamal\u0131 \u00d6rnekler)<\/h2>\n<p>Schema Registry&#8217;nin temel i\u015flevi, veri \u015femalar\u0131n\u0131 merkezi olarak depolamak ve y\u00f6netmektir. Bu b\u00f6l\u00fcmde, Avro \u015femalar\u0131n\u0131 nas\u0131l tan\u0131mlayaca\u011f\u0131m\u0131z\u0131, Schema Registry&#8217;ye nas\u0131l kaydedece\u011fimizi ve Kafka \u00fcreticileri ile t\u00fcketicileri aras\u0131nda nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Avro, hem \u015fema tan\u0131mlama hem de kompakt ikili serile\u015ftirme i\u00e7in pop\u00fcler bir se\u00e7imdir.<\/p>\n<h3>Avro \u015eemas\u0131 Tan\u0131mlama<\/h3>\n<p>Avro \u015femalar\u0131, JSON format\u0131nda tan\u0131mlan\u0131r. Basit bir kullan\u0131c\u0131 mesaj\u0131 i\u00e7in bir Avro \u015femas\u0131 olu\u015ftural\u0131m. Bu \u015fema, bir kullan\u0131c\u0131n\u0131n ID&#8217;sini, ad\u0131n\u0131, soyad\u0131n\u0131 ve e-posta adresini i\u00e7erecektir.<\/p>\n<p><code>user-registered.avsc<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-json\">\n{\n  \"type\": \"record\",\n  \"name\": \"UserRegistered\",\n  \"namespace\": \"com.example.events\",\n  \"fields\": [\n    {\"name\": \"id\", \"type\": \"string\"},\n    {\"name\": \"firstName\", \"type\": \"string\"},\n    {\"name\": \"lastName\", \"type\": \"string\"},\n    {\"name\": \"email\", \"type\": [\"null\", \"string\"], \"default\": null}\n  ]\n}\n  <\/code><\/pre>\n<p>Bu \u015fema:<\/p>\n<ul>\n<li><code>type: \"record\"<\/code>: Bir kay\u0131t (nesne) tan\u0131mlad\u0131\u011f\u0131n\u0131 belirtir.<\/li>\n<li><code>name: \"UserRegistered\"<\/code>: \u015eeman\u0131n ad\u0131d\u0131r.<\/li>\n<li><code>namespace: \"com.example.events\"<\/code>: \u015eeman\u0131n mant\u0131ksal grubunu belirler.<\/li>\n<li><code>fields<\/code>: Kayd\u0131n alanlar\u0131n\u0131 tan\u0131mlar. Her alan\u0131n bir ad\u0131 (<code>name<\/code>) ve bir tipi (<code>type<\/code>) vard\u0131r. <code>email<\/code> alan\u0131, <code>[\"null\", \"string\"]<\/code> ile hem null olabilece\u011fini hem de string olabilece\u011fini belirtir, <code>\"default\": null<\/code> ise varsay\u0131lan de\u011ferini ayarlar.<\/li>\n<\/ul>\n<h3>Schema Registry&#8217;ye \u015eema Kaydetme<\/h3>\n<p>Olu\u015fturdu\u011fumuz Avro \u015femas\u0131n\u0131 Schema Registry&#8217;ye kaydetmek i\u00e7in cURL komutunu kullanabiliriz. \u015eema, bir Kafka konusuna (topic) ba\u011fl\u0131 olarak kaydedilir. Schema Registry, \u015fema kayd\u0131n\u0131 yaparken konu ad\u0131n\u0131 ve anahtar\/de\u011fer \u015femas\u0131 olup olmad\u0131\u011f\u0131n\u0131 dikkate al\u0131r. Genellikle <code>&lt;topic_ad\u0131&gt;-value<\/code> veya <code>&lt;topic_ad\u0131&gt;-key<\/code> format\u0131nda konu adlar\u0131 kullan\u0131l\u0131r.<\/p>\n<p><code>user-registered.avsc<\/code> dosyam\u0131z\u0131 Schema Registry&#8217;ye kaydedelim. Droplet&#8217;inizin IP adresini <code>your_droplet_ip<\/code> ile de\u011fi\u015ftirmeyi unutmay\u0131n:<\/p>\n<pre><code class=\"language-bash\">\ncurl -X POST -H \"Content-Type: application\/vnd.schemaregistry.v1+json\" \\\n      --data '{\"schema\": \"$(cat user-registered.avsc)\"}' \\\n      http:\/\/your_droplet_ip:8081\/subjects\/user-registered-value\/versions\n  <\/code><\/pre>\n<p>Ba\u015far\u0131l\u0131 bir kay\u0131t sonras\u0131, Schema Registry size bir \u015fema ID&#8217;si d\u00f6nd\u00fcrecektir. \u00d6rne\u011fin: <code>{\"id\":1}<\/code>. Bu ID, Kafka mesajlar\u0131n\u0131zda \u015fema referans\u0131 olarak kullan\u0131lacakt\u0131r.<\/p>\n<p>Kaydedilen \u015femalar\u0131 ve versiyonlar\u0131n\u0131 kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\ncurl -X GET http:\/\/your_droplet_ip:8081\/subjects\/user-registered-value\/versions\ncurl -X GET http:\/\/your_droplet_ip:8081\/subjects\/user-registered-value\/versions\/1\n  <\/code><\/pre>\n<h3>Kafka \u00dcreticisi ve T\u00fcketicisi ile Entegrasyon (Python \u00d6rne\u011fi)<\/h3>\n<p>\u015eema kaydedildikten sonra, Kafka \u00fcreticileri ve t\u00fcketicileri bu \u015femay\u0131 kullanarak veri serile\u015ftirme ve deserile\u015ftirme i\u015flemlerini ger\u00e7ekle\u015ftirebilir. Bu, Confluent&#8217;in Kafka istemci k\u00fct\u00fcphaneleri (\u00f6rne\u011fin <code>confluent-kafka-python<\/code>) arac\u0131l\u0131\u011f\u0131yla kolayca yap\u0131l\u0131r.<\/p>\n<p>\u00d6ncelikle gerekli k\u00fct\u00fcphaneleri y\u00fckleyin:<\/p>\n<pre><code class=\"language-bash\">\npip install confluent-kafka\npip install avro\n  <\/code><\/pre>\n<h4>Kafka \u00dcreticisi (Producer)<\/h4>\n<p><code>producer.py<\/code>:<\/p>\n<pre><code class=\"language-python\">\nfrom confluent_kafka import SerializingProducer\nfrom confluent_kafka.schema_registry import SchemaRegistryClient\nfrom confluent_kafka.schema_registry.avro import AvroSerializer\nfrom confluent_kafka.serialization import StringSerializer\n\n# Kafka ve Schema Registry ayarlar\u0131\nKAFKA_BROKER = \"your-kafka-broker-ip:9092\" # DigitalOcean Managed Kafka ba\u011flant\u0131 dizesi\nSCHEMA_REGISTRY_URL = \"http:\/\/your_droplet_ip:8081\"\nTOPIC = \"user-registered\"\n\n# Avro \u015femas\u0131 (bir \u00f6nceki b\u00f6l\u00fcmde tan\u0131mlad\u0131\u011f\u0131m\u0131z dosyan\u0131n i\u00e7eri\u011fi)\navro_schema_str = \"\"\"\n{\n  \"type\": \"record\",\n  \"name\": \"UserRegistered\",\n  \"namespace\": \"com.example.events\",\n  \"fields\": [\n    {\"name\": \"id\", \"type\": \"string\"},\n    {\"name\": \"firstName\", \"type\": \"string\"},\n    {\"name\": \"lastName\", \"type\": \"string\"},\n    {\"name\": \"email\", \"type\": [\"null\", \"string\"], \"default\": null}\n  ]\n}\n\"\"\"\n\n# Schema Registry istemcisi\nschema_registry_client = SchemaRegistryClient({'url': SCHEMA_REGISTRY_URL})\n\n# Avro serile\u015ftirici\n# 'avro_schema_str' yerine 'schema_registry_client.get_latest_version(f\"{TOPIC}-value\").schema.schema_str' de kullan\u0131labilir\navro_serializer = AvroSerializer(schema_registry_client, avro_schema_str)\n\n# \u00dcretici yap\u0131land\u0131rmas\u0131\nproducer_conf = {\n    'bootstrap.servers': KAFKA_BROKER,\n    'key.serializer': StringSerializer('utf_8'), # Anahtar\u0131 serile\u015ftirmek i\u00e7in\n    'value.serializer': avro_serializer\n    # E\u011fer Managed Kafka kullan\u0131yorsan\u0131z SSL\/SASL ayarlar\u0131\n    # 'security.protocol': 'SASL_SSL',\n    # 'sasl.mechanism': 'PLAIN',\n    # 'sasl.username': 'your_username',\n    # 'sasl.password': 'your_password',\n    # 'ssl.ca.location': '\/path\/to\/your\/ca-cert.pem'\n}\n\nproducer = SerializingProducer(producer_conf)\n\ndef delivery_report(err, msg):\n    if err is not None:\n        print(f\"Mesaj g\u00f6nderimi ba\u015far\u0131s\u0131z: {err}\")\n    else:\n        print(f\"Mesaj g\u00f6nderildi. Konu: {msg.topic()}, B\u00f6l\u00fcm: {msg.partition()}, Ofset: {msg.offset()}\")\n\n# G\u00f6nderilecek veri\nuser_data = {\n    \"id\": \"user-123\",\n    \"firstName\": \"Ali\",\n    \"lastName\": \"Can\",\n    \"email\": \"ali.can@example.com\"\n}\n\ntry:\n    producer.produce(\n        topic=TOPIC,\n        key=user_data[\"id\"],\n        value=user_data,\n        on_delivery=delivery_report\n    )\n    producer.flush() # Mesajlar\u0131n g\u00f6nderildi\u011finden emin olun\nexcept Exception as e:\n    print(f\"Hata olu\u015ftu: {e}\")\n\n  <\/code><\/pre>\n<h4>Kafka T\u00fcketicisi (Consumer)<\/h4>\n<p><code>consumer.py<\/code>:<\/p>\n<pre><code class=\"language-python\">\nfrom confluent_kafka import DeserializingConsumer\nfrom confluent_kafka.schema_registry import SchemaRegistryClient\nfrom confluent_kafka.schema_registry.avro import AvroDeserializer\nfrom confluent_kafka.serialization import StringDeserializer\n\n# Kafka ve Schema Registry ayarlar\u0131\nKAFKA_BROKER = \"your-kafka-broker-ip:9092\" # DigitalOcean Managed Kafka ba\u011flant\u0131 dizesi\nSCHEMA_REGISTRY_URL = \"http:\/\/your_droplet_ip:8081\"\nTOPIC = \"user-registered\"\nGROUP_ID = \"my-consumer-group\"\n\n# Schema Registry istemcisi\nschema_registry_client = SchemaRegistryClient({'url': SCHEMA_REGISTRY_URL})\n\n# Avro deserile\u015ftirici\n# \u015eemay\u0131 do\u011frudan string olarak vermek yerine, Schema Registry'den ID ile otomatik olarak alacakt\u0131r.\navro_deserializer = AvroDeserializer(schema_registry_client)\n\n# T\u00fcketici yap\u0131land\u0131rmas\u0131\nconsumer_conf = {\n    'bootstrap.servers': KAFKA_BROKER,\n    'key.deserializer': StringDeserializer('utf_8'),\n    'value.deserializer': avro_deserializer,\n    'group.id': GROUP_ID,\n    'auto.offset.reset': 'earliest' # En ba\u015ftan okumaya ba\u015fla\n    # E\u011fer Managed Kafka kullan\u0131yorsan\u0131z SSL\/SASL ayarlar\u0131\n    # 'security.protocol': 'SASL_SSL',\n    # 'sasl.mechanism': 'PLAIN',\n    # 'sasl.username': 'your_username',\n    # 'sasl.password': 'your_password',\n    # 'ssl.ca.location': '\/path\/to\/your\/ca-cert.pem'\n}\n\nconsumer = DeserializingConsumer(consumer_conf)\nconsumer.subscribe([TOPIC])\n\ntry:\n    while True:\n        msg = consumer.poll(timeout=1.0) # 1 saniye bekle\n        if msg is None:\n            continue\n        if msg.error():\n            print(f\"T\u00fcketici hatas\u0131: {msg.error()}\")\n            continue\n\n        key = msg.key()\n        value = msg.value()\n        print(f\"Al\u0131nan Mesaj - Anahtar: {key}, De\u011fer: {value}\")\n\nexcept KeyboardInterrupt:\n    pass\nfinally:\n    consumer.close()\n  <\/code><\/pre>\n<p>Bu \u00f6rneklerde, <code>AvroSerializer<\/code> ve <code>AvroDeserializer<\/code>, Schema Registry ile otomatik olarak etkile\u015fime girerek \u015fema kayd\u0131n\u0131 ve do\u011frulamay\u0131 ger\u00e7ekle\u015ftirir. \u00dcretici, mesaj\u0131 Avro format\u0131nda serile\u015ftirip Kafka&#8217;ya g\u00f6nderirken, mesaj\u0131n ba\u015fl\u0131\u011f\u0131na (header) \u015fema kimli\u011fini ekler. T\u00fcketici ise bu \u015fema kimli\u011fini okuyarak Schema Registry&#8217;den ilgili \u015femay\u0131 al\u0131r ve mesaj\u0131 do\u011fru bir \u015fekilde deserile\u015ftirir.<\/p>\n<h2>\u015eema Evrimi ve Uyumluluk Modlar\u0131: Veri B\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc Koruma Sanat\u0131<\/h2>\n<p>Uygulamalar geli\u015ftik\u00e7e, kulland\u0131klar\u0131 veri \u015femalar\u0131 da ka\u00e7\u0131n\u0131lmaz olarak de\u011fi\u015fir. Yeni alanlar eklenmesi, mevcut alanlar\u0131n kald\u0131r\u0131lmas\u0131 veya veri tiplerinin de\u011fi\u015ftirilmesi gibi durumlar s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan senaryolard\u0131r. Schema Registry, bu \u015fema evrimini &#8220;uyumluluk modlar\u0131&#8221; ad\u0131 verilen kurallar dizisiyle y\u00f6neterek veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flar ve servisler aras\u0131nda kesintisiz ileti\u015fimi garanti eder.<\/p>\n<p>Uyumluluk modlar\u0131, yeni bir \u015fema versiyonunun eski versiyonlarla ne kadar uyumlu oldu\u011funu belirler. Bu, \u00f6zellikle farkl\u0131 zamanlarda da\u011f\u0131t\u0131lm\u0131\u015f servislerin ayn\u0131 Kafka konusundaki mesajlar\u0131 sorunsuz bir \u015fekilde i\u015fleyebilmesi i\u00e7in kritik \u00f6neme sahiptir. Schema Registry, her konu (subject) i\u00e7in ayr\u0131 ayr\u0131 veya global olarak bir uyumluluk modu ayarlanmas\u0131na izin verir.<\/p>\n<h3>Ba\u015fl\u0131ca Uyumluluk Modlar\u0131<\/h3>\n<p>Schema Registry&#8217;nin sundu\u011fu ba\u015fl\u0131ca uyumluluk modlar\u0131 \u015funlard\u0131r:<\/p>\n<ol>\n<li><strong>BACKWARD (Geriye Uyumlu):<\/strong> Yeni \u015fema, eski \u015fema taraf\u0131ndan \u00fcretilen veriyi okuyabilir. Yani, yeni bir t\u00fcketici eski bir \u00fcreticinin mesaj\u0131n\u0131 i\u015fleyebilir. Bu, genellikle yeni iste\u011fe ba\u011fl\u0131 alanlar ekledi\u011finizde veya mevcut alanlar\u0131 kald\u0131rd\u0131\u011f\u0131n\u0131zda (e\u011fer varsay\u0131lan de\u011ferleri varsa) kullan\u0131l\u0131r.<br \/>\n      <br \/><em>Senaryo:<\/em> Eski bir alan\u0131 kald\u0131rd\u0131n\u0131z, ancak eski \u00fcreticiler hala o alan\u0131 i\u00e7eren mesajlar g\u00f6nderiyor. Yeni t\u00fcketiciler bu alan\u0131 g\u00f6rmezden gelerek eski mesajlar\u0131 i\u015fleyebilir.<\/li>\n<li><strong>FORWARD (\u0130leri Uyumlu):<\/strong> Eski \u015fema, yeni \u015fema taraf\u0131ndan \u00fcretilen veriyi okuyabilir. Yani, eski bir t\u00fcketici yeni bir \u00fcreticinin mesaj\u0131n\u0131 i\u015fleyebilir. Bu, genellikle yeni zorunlu alanlar ekledi\u011finizde (ancak eski t\u00fcketicilerin bu alanlar\u0131 g\u00f6rmezden gelebilece\u011fi \u015fekilde) kullan\u0131l\u0131r.<br \/>\n      <br \/><em>Senaryo:<\/em> Yeni bir zorunlu alan eklediniz, ancak eski t\u00fcketiciler bu alan\u0131 bilmiyor. Eski t\u00fcketiciler, yeni \u00fcreticilerin mesajlar\u0131n\u0131, bilmedikleri alan\u0131 atlayarak i\u015fleyebilir.<\/li>\n<li><strong>FULL (Tam Uyumlu):<\/strong> Hem geriye hem de ileriye uyumludur. Yeni \u015fema eski veriyi okuyabilir ve eski \u015fema yeni veriyi okuyabilir. Bu en k\u0131s\u0131tlay\u0131c\u0131 moddur ve genellikle sadece iste\u011fe ba\u011fl\u0131 alanlar\u0131n varsay\u0131lan de\u011ferlerle eklenmesi gibi \u00e7ok k\u00fc\u00e7\u00fck de\u011fi\u015fikliklere izin verir.<\/li>\n<li><strong>NONE (Uyumsuz):<\/strong> \u015eema evrimi kontrol\u00fc yap\u0131lmaz. Herhangi bir \u015fema de\u011fi\u015fikli\u011fine izin verilir. Bu mod, dikkatli kullan\u0131lmal\u0131 ve genellikle geli\u015ftirme veya test ortamlar\u0131 i\u00e7in ayr\u0131lmal\u0131d\u0131r, \u00e7\u00fcnk\u00fc veri uyumsuzluklar\u0131na yol a\u00e7abilir.<\/li>\n<li><strong>TRANSITIVE Modlar:<\/strong> <code>BACKWARD_TRANSITIVE<\/code>, <code>FORWARD_TRANSITIVE<\/code>, <code>FULL_TRANSITIVE<\/code> modlar\u0131, uyumlulu\u011fu sadece bir \u00f6nceki versiyonla de\u011fil, t\u00fcm \u00f6nceki versiyonlarla kontrol eder. Bu, daha kat\u0131 bir uyumluluk denetimi sa\u011flar ve uzun vadeli \u015fema evrimi i\u00e7in daha g\u00fcvenlidir.<\/li>\n<\/ol>\n<h3>Uyumluluk Modunu Ayarlama<\/h3>\n<p>Bir konunun uyumluluk modunu ayarlamak i\u00e7in Schema Registry API&#8217;sini kullan\u0131r\u0131z:<\/p>\n<pre><code class=\"language-bash\">\n# user-registered-value konusu i\u00e7in geriye uyumlulu\u011fu ayarla\ncurl -X PUT -H \"Content-Type: application\/vnd.schemaregistry.v1+json\" \\\n      --data '{\"compatibility\": \"BACKWARD\"}' \\\n      http:\/\/your_droplet_ip:8081\/config\/user-registered-value\n  <\/code><\/pre>\n<p>Mevcut uyumluluk modunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\ncurl -X GET http:\/\/your_droplet_ip:8081\/config\/user-registered-value\n  <\/code><\/pre>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Yeni Alan Ekleme<\/h3>\n<p>Diyelim ki <code>UserRegistered<\/code> \u015femam\u0131za yeni bir alan, <code>registrationDate<\/code>, eklemek istiyoruz. Bu alan\u0131n iste\u011fe ba\u011fl\u0131 olmas\u0131n\u0131 ve varsay\u0131lan bir de\u011feri olmas\u0131n\u0131 istiyoruz. Bu durumda <code>BACKWARD<\/code> uyumluluk modu idealdir, \u00e7\u00fcnk\u00fc eski t\u00fcketiciler bu yeni alan\u0131 bilmedikleri i\u00e7in g\u00f6rmezden gelebilirler.<\/p>\n<p>Yeni \u015fema (<code>user-registered-v2.avsc<\/code>):<\/p>\n<pre><code class=\"language-json\">\n{\n  \"type\": \"record\",\n  \"name\": \"UserRegistered\",\n  \"namespace\": \"com.example.events\",\n  \"fields\": [\n    {\"name\": \"id\", \"type\": \"string\"},\n    {\"name\": \"firstName\", \"type\": \"string\"},\n    {\"name\": \"lastName\", \"type\": \"string\"},\n    {\"name\": \"email\", \"type\": [\"null\", \"string\"], \"default\": null},\n    {\"name\": \"registrationDate\", \"type\": [\"null\", \"string\"], \"default\": null} # Yeni alan\n  ]\n}\n  <\/code><\/pre>\n<p>Bu \u015femay\u0131 kaydedelim:<\/p>\n<pre><code class=\"language-bash\">\ncurl -X POST -H \"Content-Type: application\/vnd.schemaregistry.v1+json\" \\\n      --data '{\"schema\": \"$(cat user-registered-v2.avsc)\"}' \\\n      http:\/\/your_droplet_ip:8081\/subjects\/user-registered-value\/versions\n  <\/code><\/pre>\n<p>E\u011fer uyumluluk modu <code>BACKWARD<\/code> olarak ayarland\u0131ysa, Schema Registry bu yeni \u015femay\u0131 kabul edecektir. Art\u0131k yeni \u00fcreticiler <code>registrationDate<\/code> alan\u0131n\u0131 i\u00e7eren mesajlar g\u00f6nderebilirken, eski t\u00fcketiciler bu mesajlar\u0131 hala ba\u015far\u0131l\u0131 bir \u015fekilde i\u015fleyebilir (<code>registrationDate<\/code> alan\u0131n\u0131 g\u00f6rmezden gelerek). Bu, sisteminizde kesintiye neden olmadan \u015fema evrimini y\u00f6netmenin g\u00fcc\u00fcn\u00fc g\u00f6sterir.<\/p>\n<div class=\"expert-tip\">\n    Uzman \u0130pucu: \u015eema evrimi stratejinizi dikkatlice planlay\u0131n. Genellikle, <code>BACKWARD<\/code> veya <code>FULL_TRANSITIVE<\/code> modlar\u0131, \u00fcretim ortamlar\u0131nda en g\u00fcvenli se\u00e7eneklerdir. \u015eema de\u011fi\u015fikliklerini k\u00fc\u00e7\u00fck ve art\u0131ml\u0131 tutmak, uyumluluk sorunlar\u0131n\u0131 minimize etmenin anahtar\u0131d\u0131r.\n  <\/div>\n<h2>Performans ve G\u00fcvenlik \u0130pu\u00e7lar\u0131: \u00dcretim Ortamlar\u0131 \u0130\u00e7in Neler Yapmal\u0131y\u0131z?<\/h2>\n<p>Kafka Schema Registry&#8217;yi DigitalOcean \u00fczerinde \u00fcretim ortam\u0131nda kullan\u0131rken performans, g\u00fcvenlik ve y\u00fcksek eri\u015filebilirlik konular\u0131 b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r. Bu b\u00f6l\u00fcmde, sisteminizin sa\u011flam ve g\u00fcvenilir olmas\u0131n\u0131 sa\u011flamak i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131n\u0131 ve en iyi uygulamalar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Performans Optimizasyonu<\/h3>\n<ol>\n<li><strong>Donan\u0131m Kaynaklar\u0131:<\/strong> Schema Registry&#8217;nin \u00e7al\u0131\u015ft\u0131\u011f\u0131 Droplet&#8217;in yeterli CPU, RAM ve disk kaynaklar\u0131na sahip oldu\u011fundan emin olun. \u00d6zellikle y\u00fcksek hacimli \u015fema kay\u0131t ve sorgulama i\u015flemleri bekliyorsan\u0131z, kaynaklar\u0131 buna g\u00f6re \u00f6l\u00e7eklendirin.<\/li>\n<li><strong>A\u011f Gecikmesi:<\/strong> Schema Registry&#8217;nin Kafka broker&#8217;lar\u0131na ve uygulamalar\u0131n\u0131za (\u00fcretici\/t\u00fcketici) yak\u0131n co\u011frafi konumlarda olmas\u0131n\u0131 sa\u011flay\u0131n. DigitalOcean&#8217;da ayn\u0131 veri merkezi i\u00e7indeki Droplet&#8217;ler ve Managed Kafka k\u00fcmeleri aras\u0131nda d\u00fc\u015f\u00fck gecikme sa\u011flan\u0131r.<\/li>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> Schema Registry, \u015femalar\u0131 \u00f6nbelle\u011fe al\u0131r. Varsay\u0131lan ayarlarla \u00e7o\u011fu senaryo i\u00e7in yeterli performans sunar. Ancak \u00e7ok y\u00fcksek y\u00fck alt\u0131nda, istemci taraf\u0131nda da \u015fema \u00f6nbelleklemesi yaparak Schema Registry&#8217;ye yap\u0131lan istek say\u0131s\u0131n\u0131 azaltabilirsiniz.<\/li>\n<li><strong>S\u00fcr\u00fcmleme ve Temizleme:<\/strong> Zamanla bir\u00e7ok \u015fema versiyonu birikebilir. Gereksiz veya kullan\u0131lmayan eski \u015fema versiyonlar\u0131n\u0131 temizlemek, Schema Registry&#8217;nin disk kullan\u0131m\u0131n\u0131 ve performans\u0131n\u0131 art\u0131rabilir. Ancak bu i\u015flemi yaparken dikkatli olun ve uyumluluk gereksinimlerini g\u00f6z \u00f6n\u00fcnde bulundurun.<\/li>\n<\/ol>\n<h3>G\u00fcvenlik \u00d6nlemleri<\/h3>\n<ol>\n<li><strong>A\u011f \u0130zolasyonu (VPC):<\/strong> Schema Registry Droplet&#8217;inizi DigitalOcean VPC (Virtual Private Cloud) a\u011f\u0131na dahil edin. Bu, Schema Registry ile Kafka broker&#8217;lar\u0131 ve uygulamalar\u0131n\u0131z aras\u0131ndaki ileti\u015fimin \u00f6zel bir a\u011f \u00fczerinden yap\u0131lmas\u0131n\u0131 sa\u011flar ve d\u0131\u015far\u0131dan eri\u015fimi k\u0131s\u0131tlar. Public IP yerine Private IP kullan\u0131n.<\/li>\n<li><strong>G\u00fcvenlik Duvar\u0131 (Firewall):<\/strong> Droplet&#8217;inizin g\u00fcvenlik duvar\u0131n\u0131 (DigitalOcean Firewall veya UFW) yap\u0131land\u0131rarak sadece belirli IP adreslerinden veya VPC i\u00e7indeki di\u011fer Droplet&#8217;lerden Schema Registry&#8217;nin 8081 portuna eri\u015fime izin verin.\n<pre><code class=\"language-bash\">\n# Sadece belirli bir IP'den 8081 portuna eri\u015fime izin ver\nsudo ufw allow from your_trusted_ip to any port 8081\n# VPC i\u00e7inden eri\u015fime izin ver (\u00f6rnek: 10.0.0.0\/16 aral\u0131\u011f\u0131)\nsudo ufw allow from 10.0.0.0\/16 to any port 8081\nsudo ufw enable\n      <\/code><\/pre>\n<\/li>\n<li><strong>SSL\/TLS \u015eifrelemesi:<\/strong> Schema Registry ile istemciler (\u00fcreticiler\/t\u00fcketiciler) aras\u0131ndaki ileti\u015fimi SSL\/TLS ile \u015fifreleyin. Bu, verilerin a\u011f \u00fczerinde \u015fifreli olarak iletilmesini sa\u011flar. Schema Registry&#8217;nin kendi SSL\/TLS ayarlar\u0131 mevcuttur. Ayr\u0131ca, Schema Registry&#8217;nin Kafka ile olan ileti\u015fimi i\u00e7in de SSL\/TLS yap\u0131land\u0131rmas\u0131 yap\u0131n (<code>SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: SSL<\/code> gibi).<\/li>\n<li><strong>Kimlik Do\u011frulama ve Yetkilendirme (Authentication &#038; Authorization):<\/strong> Schema Registry&#8217;nin kendisi yerle\u015fik bir kimlik do\u011frulama\/yetkilendirme mekanizmas\u0131na sahip de\u011fildir. Ancak \u00f6n\u00fcnde bir ters proxy (Nginx gibi) kullanarak temel HTTP kimlik do\u011frulamas\u0131 veya daha geli\u015fmi\u015f mekanizmalar (OAuth2 gibi) uygulayabilirsiniz. Ayr\u0131ca, Schema Registry&#8217;nin Kafka&#8217;ya ba\u011flan\u0131rken kimlik do\u011frulamas\u0131 (\u00f6rne\u011fin SASL) yapmas\u0131n\u0131 sa\u011flay\u0131n.\n<pre><code class=\"language-yaml\">\n# Schema Registry'nin Kafka'ya SASL_SSL ile ba\u011flanmas\u0131 i\u00e7in docker-compose.yml'de \u00f6rnek\nenvironment:\n  SCHEMA_REGISTRY_KAFKASTORE_SECURITY_PROTOCOL: SASL_SSL\n  SCHEMA_REGISTRY_KAFKASTORE_SASL_MECHANISM: PLAIN\n  SCHEMA_REGISTRY_KAFKASTORE_SASL_JAAS_CONFIG: \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"your_kafka_username\\\" password=\\\"your_kafka_password\\\";\"\n      <\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>Y\u00fcksek Eri\u015filebilirlik<\/h3>\n<p>\u00dcretim ortamlar\u0131nda Schema Registry&#8217;nin tek bir hata noktas\u0131 olmamas\u0131 \u00f6nemlidir. Y\u00fcksek eri\u015filebilirlik i\u00e7in:<\/p>\n<ul>\n<li><strong>Birden Fazla Schema Registry \u00d6rne\u011fi:<\/strong> Birden fazla Droplet \u00fczerinde Schema Registry \u00f6rne\u011fi \u00e7al\u0131\u015ft\u0131r\u0131n. Schema Registry, Kafka&#8217;y\u0131 bir koordinasyon ve depolama katman\u0131 olarak kulland\u0131\u011f\u0131 i\u00e7in, birden fazla \u00f6rne\u011fi ayn\u0131 Kafka k\u00fcmesine i\u015faret ederek y\u00fcksek eri\u015filebilirlik sa\u011flayabilir. Bir y\u00fck dengeleyici (DigitalOcean Load Balancer gibi) kullanarak gelen istekleri bu \u00f6rnekler aras\u0131nda da\u011f\u0131tabilirsiniz.<\/li>\n<li><strong>Otomatik Kurtarma:<\/strong> Droplet&#8217;lerinizin sa\u011fl\u0131\u011f\u0131n\u0131 izleyin ve bir hata durumunda otomatik olarak yeniden ba\u015flat\u0131lmas\u0131n\u0131 veya yeni bir Droplet \u00fczerinde Schema Registry&#8217;nin da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayacak ara\u00e7lar (\u00f6rne\u011fin, Kubernetes ile konteyner orkestrasyonu) kullan\u0131n.<\/li>\n<\/ul>\n<p>Bu ipu\u00e7lar\u0131n\u0131 uygulayarak, DigitalOcean \u00fczerinde da\u011f\u0131tt\u0131\u011f\u0131n\u0131z Kafka Schema Registry \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fcn hem g\u00fcvenli hem de y\u00fcksek performansl\u0131 olmas\u0131n\u0131 sa\u011flayabilir, b\u00f6ylece veri ak\u0131\u015f\u0131n\u0131z\u0131n kesintisiz ve tutarl\u0131 kalmas\u0131n\u0131 garanti edebilirsiniz.<\/p>\n<h2>Vaka Analizi: E-ticaret Uygulamas\u0131nda Sipari\u015f Verilerinin Y\u00f6netimi<\/h2>\n<p>Bir e-ticaret platformu d\u00fc\u015f\u00fcnelim. Bu platformda &#8220;Sipari\u015f Olu\u015fturma&#8221;, &#8220;\u00d6deme \u0130\u015fleme&#8221;, &#8220;Stok Y\u00f6netimi&#8221; ve &#8220;Kargo Takibi&#8221; gibi farkl\u0131 mikroservisler bulunuyor. Bu servisler, sipari\u015flerle ilgili olaylar\u0131 (events) Kafka \u00fczerinden birbirleriyle payla\u015f\u0131yorlar. Ba\u015flang\u0131\u00e7ta, sipari\u015f verileri basit bir JSON format\u0131nda g\u00f6nderiliyordu. Ancak zamanla, i\u015f gereksinimleri de\u011fi\u015ftik\u00e7e ve yeni \u00f6zellikler eklendik\u00e7e, veri \u015femalar\u0131nda sorunlar ortaya \u00e7\u0131kmaya ba\u015flad\u0131.<\/p>\n<h3>Ba\u015flang\u0131\u00e7taki Problemler<\/h3>\n<ol>\n<li><strong>Veri Uyumsuzluklar\u0131:<\/strong> &#8220;Sipari\u015f Olu\u015fturma&#8221; servisi, yeni bir alan (\u00f6rne\u011fin, <code>couponCode<\/code>) ekledi\u011finde, &#8220;Stok Y\u00f6netimi&#8221; servisi hala eski \u015femay\u0131 bekledi\u011fi i\u00e7in hata veriyordu. Tersine, &#8220;Kargo Takibi&#8221; servisi eski bir versiyonu kullan\u0131rken, &#8220;\u00d6deme \u0130\u015fleme&#8221; servisi yeni bir alanla (<code>paymentMethod<\/code>) mesaj g\u00f6nderdi\u011finde, &#8220;Kargo Takibi&#8221; servisi bu mesajlar\u0131 do\u011fru bir \u015fekilde i\u015fleyemiyordu.<\/li>\n<li><strong>Geli\u015ftirme Yava\u015fl\u0131\u011f\u0131:<\/strong> Her \u015fema de\u011fi\u015fikli\u011finde, ilgili t\u00fcm servislerin g\u00fcncellenmesi ve e\u015f zamanl\u0131 olarak da\u011f\u0131t\u0131lmas\u0131 gerekiyordu. Bu durum, da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini karma\u015f\u0131kla\u015ft\u0131r\u0131yor ve yeni \u00f6zelliklerin piyasaya s\u00fcr\u00fclmesini geciktiriyordu.<\/li>\n<li><strong>Hata Ay\u0131klama Zorlu\u011fu:<\/strong> Hangi servisin hangi \u015fema versiyonunu kulland\u0131\u011f\u0131n\u0131 takip etmek zorla\u015f\u0131yordu. \u00dcretim ortam\u0131ndaki hatalar\u0131n k\u00f6k nedenini bulmak zaman al\u0131c\u0131yd\u0131.<\/li>\n<\/ol>\n<h3>Kafka Schema Registry ile \u00c7\u00f6z\u00fcm<\/h3>\n<p>E-ticaret ekibi, bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in Kafka Schema Registry&#8217;yi DigitalOcean \u00fczerindeki Managed Kafka k\u00fcmesiyle birlikte kullanmaya karar verdi. Schema Registry&#8217;yi ayr\u0131 bir Droplet \u00fczerine Docker Compose ile kurdular ve t\u00fcm sipari\u015fle ilgili konular i\u00e7in (<code>order-created<\/code>, <code>payment-processed<\/code> vb.) \u015femalar\u0131 Avro format\u0131nda tan\u0131mlad\u0131lar.<\/p>\n<h4>Uygulama Ad\u0131mlar\u0131:<\/h4>\n<ol>\n<li><strong>\u015eema Tan\u0131mlama:<\/strong> Her olay (event) i\u00e7in ayr\u0131 bir Avro \u015femas\u0131 olu\u015fturdular. \u00d6rne\u011fin, <code>order-created.avsc<\/code> \u015femas\u0131 ba\u015flang\u0131\u00e7ta \u015fu alanlar\u0131 i\u00e7eriyordu: <code>orderId<\/code>, <code>userId<\/code>, <code>items<\/code> (\u00fcr\u00fcn listesi), <code>totalAmount<\/code>.<\/li>\n<li><strong>Schema Registry&#8217;ye Kay\u0131t:<\/strong> T\u00fcm \u015femalar, Schema Registry&#8217;ye <code>&lt;topic_ad\u0131&gt;-value<\/code> format\u0131nda kaydedildi. \u00d6rne\u011fin, <code>order-created-value<\/code>.<\/li>\n<li><strong>Uyumluluk Modu Ayar\u0131:<\/strong> T\u00fcm konular i\u00e7in uyumluluk modu <code>BACKWARD_TRANSITIVE<\/code> olarak ayarland\u0131. Bu, yeni t\u00fcketicilerin eski \u00fcreticilerin verilerini okuyabilmesini garanti alt\u0131na al\u0131yordu.<\/li>\n<li><strong>Servis Entegrasyonu:<\/strong> Her mikroservis, Confluent&#8217;in Kafka istemci k\u00fct\u00fcphanelerini kullanarak Schema Registry ile entegre edildi. \u00dcreticiler, mesajlar\u0131 g\u00f6ndermeden \u00f6nce \u015femaya uygunlu\u011funu kontrol ediyor, t\u00fcketiciler ise mesajlar\u0131 otomatik olarak do\u011fru \u015femayla deserile\u015ftiriyordu.<\/li>\n<\/ol>\n<h4>Sonu\u00e7lar ve Faydalar:<\/h4>\n<ol>\n<li><strong>Kesintisiz \u015eema Evrimi:<\/strong> &#8220;Sipari\u015f Olu\u015fturma&#8221; servisi, <code>couponCode<\/code> alan\u0131n\u0131 eklemek istedi\u011finde, \u015femay\u0131 g\u00fcncelleyip Schema Registry&#8217;ye yeni bir versiyon olarak kaydetti. <code>BACKWARD_TRANSITIVE<\/code> modu sayesinde, yeni \u00fcreticiler yeni alan\u0131 i\u00e7eren mesajlar g\u00f6nderirken, &#8220;Stok Y\u00f6netimi&#8221; gibi eski t\u00fcketiciler hala eski \u015femay\u0131 kullanarak \u00e7al\u0131\u015fmaya devam etti. Eski t\u00fcketiciler, bilmedikleri <code>couponCode<\/code> alan\u0131n\u0131 g\u00fcvenle g\u00f6rmezden geldi.<\/li>\n<li><strong>H\u0131zl\u0131 Geli\u015ftirme ve Da\u011f\u0131t\u0131m:<\/strong> \u015eema de\u011fi\u015fiklikleri art\u0131k t\u00fcm servislerin e\u015f zamanl\u0131 olarak da\u011f\u0131t\u0131lmas\u0131n\u0131 gerektirmiyordu. Servisler birbirinden ba\u011f\u0131ms\u0131z olarak g\u00fcncellenebiliyordu, bu da geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131rd\u0131.<\/li>\n<li><strong>Azalan Hata Oran\u0131:<\/strong> Schema Registry, hatal\u0131 formatta mesajlar\u0131n Kafka&#8217;ya ula\u015fmas\u0131n\u0131 engelleyerek veri uyumsuzluklar\u0131ndan kaynaklanan hatalar\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azaltt\u0131. Veri kalitesi artt\u0131.<\/li>\n<li><strong>Merkezi Veri Y\u00f6netimi:<\/strong> T\u00fcm \u015femalar\u0131n merkezi bir yerde bulunmas\u0131, geli\u015ftiricilerin veri yap\u0131lar\u0131n\u0131 daha kolay anlamas\u0131n\u0131 ve y\u00f6netmesini sa\u011flad\u0131. Yeni bir geli\u015ftirici ekibe kat\u0131ld\u0131\u011f\u0131nda, mevcut veri modellerini h\u0131zla \u00f6\u011frenebildi.<\/li>\n<\/ol>\n<p>Bu vaka analizi, Kafka Schema Registry&#8217;nin e-ticaret gibi dinamik ve veri yo\u011fun uygulamalarda veri tutarl\u0131l\u0131\u011f\u0131n\u0131 ve \u015fema evrimini y\u00f6netmek i\u00e7in ne kadar de\u011ferli bir ara\u00e7 oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir. DigitalOcean&#8217;\u0131n esnek altyap\u0131s\u0131 \u00fczerinde bu t\u00fcr bir \u00e7\u00f6z\u00fcm kurmak, i\u015fletmelere \u00e7eviklik ve g\u00fcvenilirlik sa\u011flar.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Modern da\u011f\u0131t\u0131k sistemlerin karma\u015f\u0131kl\u0131\u011f\u0131 i\u00e7inde veri tutarl\u0131l\u0131\u011f\u0131, bir l\u00fcks olmaktan \u00e7\u0131k\u0131p temel bir gereklilik haline gelmi\u015ftir. Bu makale boyunca, DigitalOcean \u00fczerinde Kafka Schema Registry&#8217;nin nas\u0131l kurulaca\u011f\u0131n\u0131, yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131 ve kullan\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceledik. Kafka Schema Registry&#8217;nin, Avro gibi g\u00fc\u00e7l\u00fc serile\u015ftirme formatlar\u0131yla birlikte, veri \u015femalar\u0131n\u0131z\u0131n evrimini y\u00f6netmek, veri uyumsuzluklar\u0131n\u0131 \u00f6nlemek ve mikroservisler aras\u0131nda g\u00fcvenilir bir ileti\u015fim katman\u0131 olu\u015fturmak i\u00e7in ne kadar kritik bir ara\u00e7 oldu\u011funu g\u00f6rd\u00fck. Uygulamal\u0131 Python \u00f6rnekleri ve e-ticaret vaka analizi ile, Schema Registry&#8217;nin ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l de\u011fer yaratt\u0131\u011f\u0131n\u0131 somutla\u015ft\u0131rd\u0131k.<\/p>\n<p>DigitalOcean&#8217;\u0131n esnek ve \u00f6l\u00e7eklenebilir altyap\u0131s\u0131 \u00fczerinde Schema Registry&#8217;yi konumland\u0131rmak, operasyonel y\u00fck\u00fc y\u00f6netilebilir k\u0131larken, uygulaman\u0131z\u0131n veri kalitesini ve g\u00fcvenilirli\u011fini art\u0131rman\u0131za olanak tan\u0131r. \u0130ster yeni bir proje ba\u015flat\u0131yor olun ister mevcut bir Kafka altyap\u0131n\u0131z\u0131 g\u00fc\u00e7lendirmek isteyin, Schema Registry&#8217;yi entegre etmek, veri y\u00f6netim stratejinizin vazge\u00e7ilmez bir par\u00e7as\u0131 olmal\u0131d\u0131r. B\u00f6ylece, veri uyumsuzluklar\u0131 nedeniyle ortaya \u00e7\u0131kabilecek potansiyel sorunlar\u0131 proaktif bir \u015fekilde ortadan kald\u0131rabilir, geli\u015ftirme s\u00fcre\u00e7lerinizi h\u0131zland\u0131rabilir ve i\u015f ak\u0131\u015flar\u0131n\u0131z\u0131n kesintisizli\u011fini sa\u011flayabilirsiniz.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<h3>1. Kafka Schema Registry olmadan Kafka kullanabilir miyim?<\/h3>\n<p>Evet, kullanabilirsiniz. Ancak Schema Registry olmadan, mesaj \u015femalar\u0131n\u0131n y\u00f6netimi ve uyumlulu\u011fu tamamen sizin sorumlulu\u011funuzda olur. Bu durum, \u00f6zellikle mikroservis tabanl\u0131 ve farkl\u0131 dillerde yaz\u0131lm\u0131\u015f uygulamalar\u0131n oldu\u011fu b\u00fcy\u00fck sistemlerde veri uyumsuzluklar\u0131na, hata ay\u0131klama zorluklar\u0131na ve geli\u015ftirme yava\u015fl\u0131\u011f\u0131na yol a\u00e7abilir. Schema Registry, bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h3>2. Schema Registry sadece Avro ile mi \u00e7al\u0131\u015f\u0131r?<\/h3>\n<p>Hay\u0131r, Schema Registry sadece Avro ile s\u0131n\u0131rl\u0131 de\u011fildir. Confluent Schema Registry, Avro&#8217;nun yan\u0131 s\u0131ra Protobuf (Protocol Buffers) ve JSON Schema gibi di\u011fer pop\u00fcler serile\u015ftirme formatlar\u0131n\u0131 da destekler. Hangi format\u0131 se\u00e7ece\u011finiz, projenizin gereksinimlerine ve tercihlerinize ba\u011fl\u0131d\u0131r.<\/p>\n<h3>3. DigitalOcean Managed Kafka hizmeti Schema Registry&#8217;yi i\u00e7eriyor mu?<\/h3>\n<p>Hay\u0131r, DigitalOcean Managed Kafka hizmeti \u015fu anda Schema Registry&#8217;yi do\u011frudan i\u00e7ermemektedir. Schema Registry&#8217;yi ayr\u0131 bir Droplet \u00fczerine (genellikle Docker Compose kullanarak) kurman\u0131z ve Managed Kafka k\u00fcmenize ba\u011flaman\u0131z gerekmektedir. Bu makalede anlat\u0131lan kurulum ad\u0131mlar\u0131 bu senaryoyu kapsamaktad\u0131r.<\/p>\n<h3>4. \u015eema evrimi s\u0131ras\u0131nda geriye uyumlulu\u011fu sa\u011flamak neden \u00f6nemlidir?<\/h3>\n<p>Geriye uyumluluk, yeni bir \u015fema versiyonunun, \u00f6nceki \u015fema versiyonlar\u0131yla \u00fcretilmi\u015f veriyi hala okuyup i\u015fleyebilmesini sa\u011flar. Bu, \u00f6zellikle t\u00fcketicilerin her zaman en g\u00fcncel \u015femay\u0131 kullanmad\u0131\u011f\u0131 veya ayn\u0131 anda g\u00fcncellenemedi\u011fi da\u011f\u0131t\u0131k sistemlerde kritik \u00f6neme sahiptir. Geriye uyumluluk sayesinde, eski t\u00fcketiciler yeni \u00fcreticilerin mesajlar\u0131n\u0131 sorunsuz bir \u015fekilde i\u015fleyebilir ve sistemin kesintisiz \u00e7al\u0131\u015fmaya devam etmesi sa\u011flan\u0131r.<\/p>\n<h3>5. Schema Registry&#8217;nin \u00fcretim ortam\u0131nda y\u00fcksek eri\u015filebilirli\u011fini nas\u0131l sa\u011flar\u0131m?<\/h3>\n<p>\u00dcretim ortam\u0131nda y\u00fcksek eri\u015filebilirlik i\u00e7in birden fazla Schema Registry \u00f6rne\u011fini farkl\u0131 Droplet&#8217;ler \u00fczerinde \u00e7al\u0131\u015ft\u0131rmal\u0131s\u0131n\u0131z. Schema Registry, \u015femalar\u0131 Kafka&#8217;da depolad\u0131\u011f\u0131 i\u00e7in, birden fazla \u00f6rne\u011fi ayn\u0131 Kafka k\u00fcmesine ba\u011flayarak pasif-pasif veya aktif-pasif bir yap\u0131 olu\u015fturabilirsiniz. Gelen istekleri bu \u00f6rneklere da\u011f\u0131tmak i\u00e7in DigitalOcean Load Balancer gibi bir y\u00fck dengeleyici kullanmak, sisteminizin tek bir hata noktas\u0131n\u0131 ortadan kald\u0131racakt\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DigitalOcean \u00dczerinde Kafka Schema Registry ile Veri Tutarl\u0131l\u0131\u011f\u0131 Nas\u0131l Sa\u011flan\u0131r? Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-36232","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?<\/title>\n<meta name=\"description\" content=\"Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis mimarileri ve olay tabanl\u0131 sistemlerle \u00e7al\u0131\u015f\u0131rken karma\u015f\u0131k bir meydan okumad\u0131r. Peki, Kafka gibi g\u00fc\u00e7l\u00fc bir mesajla\u015fma platformunu kullan\u0131rken veri \u015femalar\u0131n\u0131z\u0131n evrimini nas\u0131l y\u00f6netir, farkl\u0131 servisler aras\u0131nda veri uyumsuzluklar\u0131n\u0131 nas\u0131l \u00f6nlersiniz? Bu makalede, DigitalOcean \u00fczerinde Kafka Schema Registry&#039;yi ad\u0131m ad\u0131m kurarak ve kullanarak bu sorulara yan\u0131t bulaca\u011f\u0131z.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?\" \/>\n<meta property=\"og:description\" content=\"Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis mimarileri ve olay tabanl\u0131 sistemlerle \u00e7al\u0131\u015f\u0131rken karma\u015f\u0131k bir meydan okumad\u0131r. Peki, Kafka gibi g\u00fc\u00e7l\u00fc bir mesajla\u015fma platformunu kullan\u0131rken veri \u015femalar\u0131n\u0131z\u0131n evrimini nas\u0131l y\u00f6netir, farkl\u0131 servisler aras\u0131nda veri uyumsuzluklar\u0131n\u0131 nas\u0131l \u00f6nlersiniz? Bu makalede, DigitalOcean \u00fczerinde Kafka Schema Registry&#039;yi ad\u0131m ad\u0131m kurarak ve kullanarak bu sorulara yan\u0131t bulaca\u011f\u0131z.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-10T21:22:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?\",\"datePublished\":\"2025-12-10T21:22:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/\"},\"wordCount\":4521,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/\",\"name\":\"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-10T21:22:40+00:00\",\"description\":\"Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis mimarileri ve olay tabanl\u0131 sistemlerle \u00e7al\u0131\u015f\u0131rken karma\u015f\u0131k bir meydan okumad\u0131r. Peki, Kafka gibi g\u00fc\u00e7l\u00fc bir mesajla\u015fma platformunu kullan\u0131rken veri \u015femalar\u0131n\u0131z\u0131n evrimini nas\u0131l y\u00f6netir, farkl\u0131 servisler aras\u0131nda veri uyumsuzluklar\u0131n\u0131 nas\u0131l \u00f6nlersiniz? Bu makalede, DigitalOcean \u00fczerinde Kafka Schema Registry'yi ad\u0131m ad\u0131m kurarak ve kullanarak bu sorulara yan\u0131t bulaca\u011f\u0131z.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?","description":"Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis mimarileri ve olay tabanl\u0131 sistemlerle \u00e7al\u0131\u015f\u0131rken karma\u015f\u0131k bir meydan okumad\u0131r. Peki, Kafka gibi g\u00fc\u00e7l\u00fc bir mesajla\u015fma platformunu kullan\u0131rken veri \u015femalar\u0131n\u0131z\u0131n evrimini nas\u0131l y\u00f6netir, farkl\u0131 servisler aras\u0131nda veri uyumsuzluklar\u0131n\u0131 nas\u0131l \u00f6nlersiniz? Bu makalede, DigitalOcean \u00fczerinde Kafka Schema Registry'yi ad\u0131m ad\u0131m kurarak ve kullanarak bu sorulara yan\u0131t bulaca\u011f\u0131z.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/","og_locale":"tr_TR","og_type":"article","og_title":"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?","og_description":"Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis mimarileri ve olay tabanl\u0131 sistemlerle \u00e7al\u0131\u015f\u0131rken karma\u015f\u0131k bir meydan okumad\u0131r. Peki, Kafka gibi g\u00fc\u00e7l\u00fc bir mesajla\u015fma platformunu kullan\u0131rken veri \u015femalar\u0131n\u0131z\u0131n evrimini nas\u0131l y\u00f6netir, farkl\u0131 servisler aras\u0131nda veri uyumsuzluklar\u0131n\u0131 nas\u0131l \u00f6nlersiniz? Bu makalede, DigitalOcean \u00fczerinde Kafka Schema Registry'yi ad\u0131m ad\u0131m kurarak ve kullanarak bu sorulara yan\u0131t bulaca\u011f\u0131z.","og_url":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-10T21:22:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?","datePublished":"2025-12-10T21:22:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/"},"wordCount":4521,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/","url":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/","name":"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-10T21:22:40+00:00","description":"Modern da\u011f\u0131t\u0131k sistemlerde veri tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flamak, \u00f6zellikle mikroservis mimarileri ve olay tabanl\u0131 sistemlerle \u00e7al\u0131\u015f\u0131rken karma\u015f\u0131k bir meydan okumad\u0131r. Peki, Kafka gibi g\u00fc\u00e7l\u00fc bir mesajla\u015fma platformunu kullan\u0131rken veri \u015femalar\u0131n\u0131z\u0131n evrimini nas\u0131l y\u00f6netir, farkl\u0131 servisler aras\u0131nda veri uyumsuzluklar\u0131n\u0131 nas\u0131l \u00f6nlersiniz? Bu makalede, DigitalOcean \u00fczerinde Kafka Schema Registry'yi ad\u0131m ad\u0131m kurarak ve kullanarak bu sorulara yan\u0131t bulaca\u011f\u0131z.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kafka-schema-registry-nedir-ve-neden-bu-kadar-onemli\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kafka Schema Registry Nedir ve Neden Bu Kadar \u00d6nemli?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36232","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36232"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36232\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36232"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36232"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36232"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}