{"id":34908,"date":"2025-11-23T14:01:05","date_gmt":"2025-11-23T11:01:05","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/"},"modified":"2025-11-23T14:01:05","modified_gmt":"2025-11-23T11:01:05","slug":"3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/","title":{"rendered":"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi"},"content":{"rendered":"<p><meta name=\"description\" content=\"Kafka'y\u0131 uygulamal\u0131 \u00f6\u011frenmek isteyenler i\u00e7in kapsaml\u0131 bir rehber! Docker Compose kullanarak 3-broker'l\u0131 bir Kafka k\u00fcmesini s\u0131f\u0131rdan kurun, veri ak\u0131\u015f\u0131n\u0131 y\u00f6netin ve da\u011f\u0131t\u0131k sistemlerin g\u00fcc\u00fcn\u00fc ke\u015ffedin.\"><\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor. Mikroservis mimarileri y\u00fckseli\u015fe ge\u00e7tik\u00e7e, bu karma\u015f\u0131k yap\u0131lar\u0131n birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak ise kritik bir ihtiya\u00e7 haline geldi. \u0130\u015fte tam bu noktada, Apache Kafka devreye giriyor. Peki, Kafka&#8217;n\u0131n ger\u00e7ek g\u00fcc\u00fcn\u00fc ve da\u011f\u0131t\u0131k yap\u0131s\u0131n\u0131n avantajlar\u0131n\u0131 en iyi nas\u0131l deneyimleyebilirsiniz? Elbette, uygulamal\u0131 bir yakla\u015f\u0131mla, kendi \u00e7oklu broker&#8217;l\u0131 k\u00fcmenizi kurarak!<\/p>\n<p>Modern uygulama geli\u015ftirme, genellikle ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fan k\u00fc\u00e7\u00fck, odaklanm\u0131\u015f servislerden olu\u015fan mikroservis mimarisini benimser. Bu servisler, veri al\u0131\u015fveri\u015fi yapmak ve i\u015f ak\u0131\u015flar\u0131n\u0131 koordine etmek i\u00e7in etkili bir ileti\u015fim mekanizmas\u0131na ihtiya\u00e7 duyarlar. Apache Kafka, bu ileti\u015fim katman\u0131n\u0131 sa\u011flamak i\u00e7in tasarlanm\u0131\u015f, y\u00fcksek performansl\u0131, \u00f6l\u00e7eklenebilir ve dayan\u0131kl\u0131 bir da\u011f\u0131t\u0131k ak\u0131\u015f platformudur.<\/p>\n<p>Tek bir Kafka broker&#8217;\u0131 ile ba\u015flamak cazip gelse de, bu yakla\u015f\u0131m Kafka&#8217;n\u0131n en temel faydalar\u0131n\u0131 g\u00f6z ard\u0131 etmek anlam\u0131na gelir: y\u00fcksek eri\u015filebilirlik, hata tolerans\u0131 ve \u00f6l\u00e7eklenebilirlik. Tek bir broker ar\u0131zaland\u0131\u011f\u0131nda t\u00fcm sisteminiz durur ve bu, \u00fcretim ortamlar\u0131 i\u00e7in kabul edilemez bir risktir. \u00c7oklu broker&#8217;lardan olu\u015fan bir k\u00fcme kurarak, verilerinizin birden fazla sunucuya da\u011f\u0131t\u0131lmas\u0131n\u0131 ve \u00e7o\u011falt\u0131lmas\u0131n\u0131 sa\u011flars\u0131n\u0131z. Bu, bir broker \u00e7evrimd\u0131\u015f\u0131 kalsa bile verilerinize eri\u015filebilece\u011fi ve sisteminizin kesintisiz \u00e7al\u0131\u015fmaya devam edece\u011fi anlam\u0131na gelir.<\/p>\n<p>Uygulamal\u0131 olarak 3-broker&#8217;l\u0131 bir Kafka k\u00fcmesi olu\u015fturmak, bu da\u011f\u0131t\u0131k sistemin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 derinlemesine anlaman\u0131za yard\u0131mc\u0131 olur. Broker&#8217;lar aras\u0131 ileti\u015fimi, veri \u00e7o\u011faltma mekanizmalar\u0131n\u0131 ve hata tolerans\u0131n\u0131n pratik uygulamalar\u0131n\u0131 g\u00f6zlemleme f\u0131rsat\u0131 bulursunuz. Bu sayede, &#8220;replication factor&#8221; (\u00e7o\u011faltma fakt\u00f6r\u00fc) veya &#8220;partitioning&#8221; (b\u00f6l\u00fcmleme) gibi kavramlar\u0131n teoride kalmay\u0131p, somut bir deneyim haline gelmesini sa\u011flars\u0131n\u0131z. Ayr\u0131ca, ger\u00e7ek d\u00fcnya senaryolar\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 sim\u00fcle etme ve bu sorunlara kar\u015f\u0131 sisteminizi nas\u0131l daha diren\u00e7li hale getirece\u011finizi \u00f6\u011frenme \u015fans\u0131 elde edersiniz. \u00d6rne\u011fin, bir broker&#8217;\u0131 bilerek kapatarak sistemin nas\u0131l tepki verdi\u011fini g\u00f6zlemleyebilir, b\u00f6ylece Kafka&#8217;n\u0131n otomatik hata kurtarma \u00f6zelliklerini deneyimleyebilirsiniz. Bu t\u00fcr deneyimler, karma\u015f\u0131k da\u011f\u0131t\u0131k sistemleri tasarlarken ve y\u00f6netirken paha bi\u00e7ilmez i\u00e7g\u00f6r\u00fcler sunar. Dolay\u0131s\u0131yla, Kafka \u00f6\u011frenme yolculu\u011funuzda sadece teorik bilgiyle yetinmek yerine, bu g\u00fc\u00e7l\u00fc platformun kalbine inmek ve kendi ellerinizle bir k\u00fcme kurmak, bilginizi peki\u015ftirmenin en etkili yoludur.<\/p>\n<h2>Kafka&#8217;n\u0131n Temel Ta\u015flar\u0131 Nelerdir?<\/h2>\n<p>Kafka&#8217;n\u0131n \u00e7al\u0131\u015fma prensiplerini anlamak i\u00e7in baz\u0131 temel kavramlar\u0131 bilmek \u015fartt\u0131r. Bu kavramlar, Kafka k\u00fcmenizin nas\u0131l veri depolad\u0131\u011f\u0131n\u0131, i\u015fledi\u011fini ve iletti\u011fini a\u00e7\u0131klar. \u0130ster tecr\u00fcbeli bir geli\u015ftirici olun ister Kafka d\u00fcnyas\u0131na yeni ad\u0131m at\u0131n, bu yap\u0131 ta\u015flar\u0131 sa\u011flam bir temel olu\u015fturman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<ul>\n<li><strong>Broker (Arac\u0131)<\/strong>: Kafka k\u00fcmesinin ana bile\u015fenidir. Bir broker, mesajlar\u0131 al\u0131r, depolar ve t\u00fcketicilere sunar. Her broker, disk \u00fczerinde belirli bir miktarda depolama alan\u0131na sahiptir. Bir Kafka k\u00fcmesi, genellikle birden fazla broker&#8217;dan olu\u015fur ve bu broker&#8217;lar birlikte \u00e7al\u0131\u015farak y\u00fcksek eri\u015filebilirlik ve \u00f6l\u00e7eklenebilirlik sa\u011flar.<\/li>\n<li><strong>Topic (Konu)<\/strong>: Kafka&#8217;da mesajlar\u0131n kategorize edildi\u011fi mant\u0131ksal bir adland\u0131rma birimidir. \u00d6rne\u011fin, bir e-ticaret uygulamas\u0131nda &#8216;sipari\u015fler&#8217;, &#8216;\u00fcr\u00fcnler&#8217; veya &#8216;kullan\u0131c\u0131 hareketleri&#8217; gibi farkl\u0131 topic&#8217;leriniz olabilir. Producer&#8217;lar mesajlar\u0131 topic&#8217;lere yazar, Consumer&#8217;lar ise topic&#8217;lerden mesajlar\u0131 okur.<\/li>\n<li><strong>Partition (B\u00f6l\u00fcm)<\/strong>: Her topic, bir veya daha fazla partition&#8217;a ayr\u0131l\u0131r. Partition&#8217;lar, bir topic&#8217;in ger\u00e7ekte verilerinin depoland\u0131\u011f\u0131 s\u0131ral\u0131, de\u011fi\u015ftirilemez birer kay\u0131t g\u00fcnl\u00fc\u011f\u00fcd\u00fcr. Yeni mesajlar her zaman partition&#8217;\u0131n sonuna eklenir. Partition&#8217;lar sayesinde Kafka, verileri yatay olarak \u00f6l\u00e7ekleyebilir ve birden fazla broker&#8217;a da\u011f\u0131tabilir. Ayn\u0131 topic&#8217;in farkl\u0131 partition&#8217;lar\u0131, farkl\u0131 broker&#8217;lar \u00fczerinde bar\u0131nd\u0131r\u0131labilir.<\/li>\n<li><strong>Offset (Ofset)<\/strong>: Bir partition i\u00e7indeki her mesaj\u0131n benzersiz, s\u0131ral\u0131 bir kimli\u011fi vard\u0131r. Bu kimli\u011fe &#8220;offset&#8221; denir. Consumer&#8217;lar, bir partition&#8217;daki mesajlar\u0131 okurken en son hangi offset&#8217;e kadar okuduklar\u0131n\u0131 takip ederler. Bu, bir t\u00fcketici durdurulup tekrar ba\u015flat\u0131ld\u0131\u011f\u0131nda kald\u0131\u011f\u0131 yerden devam etmesini sa\u011flar.<\/li>\n<li><strong>Producer (\u00dcretici)<\/strong>: Kafka topic&#8217;lerine mesaj g\u00f6nderen istemci uygulamalard\u0131r. Producer&#8217;lar hangi topic&#8217;e ve hangi partition&#8217;a mesaj g\u00f6ndereceklerine karar verebilirler. Genellikle, mesajlar\u0131n anahtarlar\u0131na (key) g\u00f6re belirli partition&#8217;lara y\u00f6nlendirilmesi sa\u011flan\u0131r, bu da ayn\u0131 anahtara sahip mesajlar\u0131n her zaman ayn\u0131 partition&#8217;a gitmesini garantiler ve mesajlar\u0131n s\u0131ras\u0131n\u0131 korur.<\/li>\n<li><strong>Consumer (T\u00fcketici)<\/strong>: Kafka topic&#8217;lerinden mesaj okuyan istemci uygulamalard\u0131r. Consumer&#8217;lar genellikle bir &#8220;Consumer Group&#8221; (T\u00fcketici Grubu) i\u00e7inde \u00e7al\u0131\u015f\u0131r. Ayn\u0131 t\u00fcketici grubundaki farkl\u0131 t\u00fcketiciler, bir topic&#8217;in farkl\u0131 partition&#8217;lar\u0131ndan mesajlar\u0131 e\u015f zamanl\u0131 olarak i\u015fleyerek i\u015f y\u00fck\u00fcn\u00fc da\u011f\u0131tabilirler.<\/li>\n<li><strong>Zookeeper<\/strong>: Kafka&#8217;n\u0131n kendisi, da\u011f\u0131t\u0131k bir sistem olarak \u00e7al\u0131\u015fmak i\u00e7in meta verileri (broker listeleri, topic konfig\u00fcrasyonlar\u0131, partition liderleri vb.) y\u00f6netmek \u00fczere Apache ZooKeeper&#8217;a ba\u011f\u0131ml\u0131d\u0131r. ZooKeeper, da\u011f\u0131t\u0131k koordinasyon hizmetleri sunan, y\u00fcksek oranda eri\u015filebilir ve g\u00fcvenilir bir servisidir. Kafka broker&#8217;lar\u0131 ZooKeeper&#8217;a ba\u011flanarak birbirlerini ve k\u00fcme durumunu \u00f6\u011frenirler. Ancak Kafka&#8217;n\u0131n daha yeni s\u00fcr\u00fcmleri (KRaft modu) ZooKeeper ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 ortadan kald\u0131rmay\u0131 hedeflemektedir. Bizim kuraca\u011f\u0131m\u0131z k\u00fcme i\u00e7in hala ZooKeeper&#8217;a ihtiyac\u0131m\u0131z olacak.<\/li>\n<\/ul>\n<p>Bu temel bile\u015fenler, Kafka&#8217;n\u0131n nas\u0131l y\u00fcksek performansl\u0131 ve g\u00fcvenilir bir veri ak\u0131\u015f platformu sa\u011flad\u0131\u011f\u0131n\u0131 anlaman\u0131n anahtar\u0131d\u0131r. Her bir bile\u015fenin rol\u00fcn\u00fc kavramak, karma\u015f\u0131k veri boru hatlar\u0131 tasarlarken ve sorun giderirken size b\u00fcy\u00fck avantaj sa\u011flayacakt\u0131r.<\/p>\n<h2>Docker ve Docker Compose Neden Kafka \u0130\u00e7in \u0130deal Bir \u00c7\u00f6z\u00fcm?<\/h2>\n<p>Da\u011f\u0131t\u0131k sistemlerin kurulumu ve y\u00f6netimi, \u00f6zellikle geli\u015ftirme veya test ortamlar\u0131nda, genellikle zaman al\u0131c\u0131 ve karma\u015f\u0131k olabilir. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurmak, farkl\u0131 servisleri yap\u0131land\u0131rmak ve bunlar\u0131n birbiriyle uyumlu \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak, geli\u015ftiriciler i\u00e7in ciddi bir ba\u015f a\u011fr\u0131s\u0131 haline gelebilir. \u0130\u015fte tam bu noktada Docker ve Docker Compose, Kafka gibi karma\u015f\u0131k sistemler i\u00e7in hayat kurtar\u0131c\u0131 bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<p><strong>Docker<\/strong>, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 tek bir pakette (container &#8211; kapsay\u0131c\u0131) toplaman\u0131za olanak tan\u0131yan bir platformdur. Bu kapsay\u0131c\u0131lar, herhangi bir ortamda (geli\u015ftirici makinesi, test sunucusu, \u00fcretim sunucusu) tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015f\u0131r. Kafka s\u00f6z konusu oldu\u011funda, bu \u015fu anlama gelir: Bir Kafka broker&#8217;\u0131n\u0131 veya ZooKeeper&#8217;\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in i\u015fletim sisteminize Java kurmak, JAR dosyalar\u0131n\u0131 indirmek, ortam de\u011fi\u015fkenlerini ayarlamak gibi ad\u0131mlarla u\u011fra\u015fman\u0131za gerek kalmaz. Sadece ilgili Docker imaj\u0131n\u0131 \u00e7ekip \u00e7al\u0131\u015ft\u0131rman\u0131z yeterlidir. Her bir Kafka broker&#8217;\u0131 veya ZooKeeper \u00f6rne\u011fi kendi izole kapsay\u0131c\u0131s\u0131nda \u00e7al\u0131\u015f\u0131r, bu da ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 ortadan kald\u0131r\u0131r ve temiz bir \u00e7al\u0131\u015fma ortam\u0131 sa\u011flar.<\/p>\n<p><strong>Docker Compose<\/strong> ise, birden fazla Docker kapsay\u0131c\u0131s\u0131n\u0131 tan\u0131mlaman\u0131za ve tek bir komutla \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131yan bir ara\u00e7t\u0131r. Kafka k\u00fcmesi gibi birden fazla servisten (ZooKeeper, birden fazla Kafka broker&#8217;\u0131) olu\u015fan bir da\u011f\u0131t\u0131k sistemi kurarken, Docker Compose&#8217;un g\u00fcc\u00fc ortaya \u00e7\u0131kar. Tek bir <code class=\"language-yaml\">docker-compose.yml<\/code> dosyas\u0131 ile t\u00fcm k\u00fcmenizin mimarisini, her bir servisin yap\u0131land\u0131rmas\u0131n\u0131 (portlar, ortam de\u011fi\u015fkenleri, ba\u011f\u0131ml\u0131l\u0131klar) ve aralar\u0131ndaki a\u011f ba\u011flant\u0131lar\u0131n\u0131 deklaratif bir \u015fekilde tan\u0131mlayabilirsiniz. Bu dosya, k\u00fcmenizin &#8220;plan\u0131&#8221; gibidir. Bu yakla\u015f\u0131m\u0131n sundu\u011fu avantajlar saymakla bitmez:<\/p>\n<ul>\n<li><strong>Kolay Kurulum ve H\u0131zl\u0131 Ba\u015flang\u0131\u00e7<\/strong>: Karma\u015f\u0131k kurulum ad\u0131mlar\u0131 yerine sadece bir <code class=\"language-yaml\">docker-compose up<\/code> komutuyla t\u00fcm k\u00fcmenizi saniyeler i\u00e7inde aya\u011fa kald\u0131rabilirsiniz. Bu, \u00f6zellikle yeni bir projeye ba\u015flarken veya bir ekip \u00fcyesinin ortam\u0131n\u0131 kurarken b\u00fcy\u00fck zaman kazanc\u0131 sa\u011flar.<\/li>\n<li><strong>Tekrarlanabilirlik<\/strong>: <code class=\"language-yaml\">docker-compose.yml<\/code> dosyas\u0131, k\u00fcmenizin tam yap\u0131land\u0131rmas\u0131n\u0131 i\u00e7erdi\u011fi i\u00e7in, ayn\u0131 dosyay\u0131 kullanan herkes ayn\u0131 ortam\u0131 elde eder. Bu, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; gibi sorunlar\u0131 ortadan kald\u0131r\u0131r ve geli\u015ftirme ile test ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131k sa\u011flar.<\/li>\n<li><strong>\u0130zolasyon<\/strong>: Her servis kendi kapsay\u0131c\u0131s\u0131nda \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131 ya\u015fanmaz. Bir serviste yap\u0131lan de\u011fi\u015fiklikler veya g\u00fcncellemeler di\u011fer servisleri do\u011frudan etkilemez. Bu da sorun gidermeyi ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Versiyonlama ve S\u00fcr\u00fcm Kontrol\u00fc<\/strong>: <code class=\"language-yaml\">docker-compose.yml<\/code> dosyas\u0131n\u0131 versiyon kontrol sisteminize (Git gibi) ekleyerek, k\u00fcmenizin yap\u0131land\u0131rmas\u0131n\u0131 kodunuzla birlikte y\u00f6netebilirsiniz. Bu, farkl\u0131 geli\u015ftirme a\u015famalar\u0131 i\u00e7in farkl\u0131 Kafka k\u00fcmesi yap\u0131land\u0131rmalar\u0131n\u0131 kolayca denemenize olanak tan\u0131r.<\/li>\n<li><strong>Kaynak Verimlili\u011fi<\/strong>: Kapsay\u0131c\u0131lar, sanal makinelere k\u0131yasla daha hafiftir ve daha az kaynak t\u00fcketirler. Bu da, geli\u015ftirme makinenizde birden fazla servis i\u00e7eren bir Kafka k\u00fcmesini sorunsuzca \u00e7al\u0131\u015ft\u0131rman\u0131za imkan tan\u0131r.<\/li>\n<\/ul>\n<p>\u00d6zetle, Docker ve Docker Compose, Kafka&#8217;n\u0131n g\u00fc\u00e7l\u00fc da\u011f\u0131t\u0131k yeteneklerini masa\u00fcst\u00fc bilgisayar\u0131n\u0131za getirmek i\u00e7in m\u00fckemmel bir kombinasyon sunar. Karma\u015f\u0131kl\u0131\u011f\u0131 soyutlayarak, \u00f6\u011frenme s\u00fcrecinizi h\u0131zland\u0131r\u0131r ve sizi Kafka&#8217;n\u0131n i\u00e7 i\u015fleyi\u015fine odaklanmaya te\u015fvik eder. Bu sayede, &#8220;nas\u0131l kurulur&#8221; derdinden ziyade, &#8220;Kafka ile neler yapabilirim&#8221; sorusuna daha fazla odaklanabilirsiniz.<\/p>\n<h2>Ad\u0131m Ad\u0131m: 3-Broker Kafka K\u00fcmesi Nas\u0131l Kurulur?<\/h2>\n<p>Kafka&#8217;n\u0131n teorik temellerini ve Docker&#8217;\u0131n bize sa\u011flad\u0131\u011f\u0131 kolayl\u0131klar\u0131 anlad\u0131\u011f\u0131m\u0131za g\u00f6re, art\u0131k kollar\u0131 s\u0131vay\u0131p kendi 3-broker&#8217;l\u0131 Kafka k\u00fcmemizi kurman\u0131n zaman\u0131 geldi. Bu b\u00f6l\u00fcmde, ad\u0131m ad\u0131m bir <code class=\"language-yaml\">docker-compose.yml<\/code> dosyas\u0131 olu\u015fturacak, k\u00fcmemizi aya\u011fa kald\u0131racak ve temel kontrolleri yapaca\u011f\u0131z.<\/p>\n<h3>Gerekli Ara\u00e7lar\u0131 Haz\u0131rlama: Nereden Ba\u015flamal\u0131y\u0131z?<\/h3>\n<p>Ba\u015flamadan \u00f6nce bilgisayar\u0131n\u0131zda kurulu olmas\u0131 gereken temel ara\u00e7lar var:<\/p>\n<ol>\n<li><strong>Docker Desktop<\/strong>: Docker Engine ve Docker Compose&#8217;u i\u00e7eren entegre bir pakettir. Windows, macOS ve Linux i\u00e7in mevcuttur. E\u011fer kurulu de\u011filse, <a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\" target=\"_blank\">Docker web sitesinden<\/a> indirebilirsiniz. Kurulumdan sonra Docker Desktop uygulamas\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun.<\/li>\n<li><strong>Metin D\u00fczenleyici \/ IDE<\/strong>: <code class=\"language-yaml\">docker-compose.yml<\/code> dosyas\u0131n\u0131 d\u00fczenlemek i\u00e7in Visual Studio Code gibi bir metin d\u00fczenleyiciye ihtiyac\u0131n\u0131z olacak.<\/li>\n<\/ol>\n<p>Bu ara\u00e7lar haz\u0131r oldu\u011funda, yeni bir proje klas\u00f6r\u00fc olu\u015fturarak ba\u015flayabiliriz. \u00d6rne\u011fin, masa\u00fcst\u00fcn\u00fczde <code class=\"language-bash\">kafka-cluster<\/code> ad\u0131nda bir klas\u00f6r olu\u015fturun.<\/p>\n<h3>Docker Compose Dosyas\u0131n\u0131 Olu\u015fturma: Kafka D\u00fcnyam\u0131z\u0131 \u015eekillendiriyoruz<\/h3>\n<p>Olu\u015fturdu\u011fumuz <code class=\"language-bash\">kafka-cluster<\/code> klas\u00f6r\u00fcn\u00fcn i\u00e7ine <code class=\"language-yaml\">docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun ve a\u015fa\u011f\u0131daki i\u00e7eri\u011fi bu dosyaya yap\u0131\u015ft\u0131r\u0131n. Bu dosya, k\u00fcmemizin t\u00fcm yap\u0131land\u0131rmas\u0131n\u0131 i\u00e7erecek.<\/p>\n<pre><code class=\"language-yaml\">\nversion: '3.8'\n\nservices:\n  zookeeper:\n    image: confluentinc\/cp-zookeeper:7.4.0\n    hostname: zookeeper\n    container_name: zookeeper\n    ports:\n      - \"2181:2181\"\n    environment:\n      ZOOKEEPER_CLIENT_PORT: 2181\n      ZOOKEEPER_TICK_TIME: 2000\n    restart: always\n\n  kafka-broker-1:\n    image: confluentinc\/cp-kafka:7.4.0\n    hostname: kafka-broker-1\n    container_name: kafka-broker-1\n    ports:\n      - \"9092:9092\"\n    environment:\n      KAFKA_BROKER_ID: 1\n      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'\n      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT\n      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:\/\/kafka-broker-1:29092,PLAINTEXT_HOST:\/\/localhost:9092\n      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1\n      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0\n    depends_on:\n      - zookeeper\n    restart: always\n\n  kafka-broker-2:\n    image: confluentinc\/cp-kafka:7.4.0\n    hostname: kafka-broker-2\n    container_name: kafka-broker-2\n    ports:\n      - \"9093:9092\" # D\u0131\u015far\u0131dan 9093, i\u00e7eride 9092\n    environment:\n      KAFKA_BROKER_ID: 2\n      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'\n      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT\n      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:\/\/kafka-broker-2:29093,PLAINTEXT_HOST:\/\/localhost:9093\n      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1\n      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0\n    depends_on:\n      - zookeeper\n    restart: always\n\n  kafka-broker-3:\n    image: confluentinc\/cp-kafka:7.4.0\n    hostname: kafka-broker-3\n    container_name: kafka-broker-3\n    ports:\n      - \"9094:9092\" # D\u0131\u015far\u0131dan 9094, i\u00e7eride 9092\n    environment:\n      KAFKA_BROKER_ID: 3\n      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'\n      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT\n      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:\/\/kafka-broker-3:29094,PLAINTEXT_HOST:\/\/localhost:9094\n      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1\n      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0\n    depends_on:\n      - zookeeper\n    restart: always\n\n  kafka-ui:\n    image: provectuslabs\/kafka-ui:latest\n    container_name: kafka-ui\n    ports:\n      - \"8080:8080\"\n    environment:\n      KAFKA_CLUSTERS_0_NAME: local-kafka-cluster\n      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka-broker-1:29092,kafka-broker-2:29093,kafka-broker-3:29094\n      KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181\n      KAFKA_CLUSTERS_0_JMX_PORT: 9999 # JMX ba\u011flant\u0131s\u0131 i\u00e7in iste\u011fe ba\u011fl\u0131\n      KAFKA_CLUSTERS_0_JMX_HOSTNAME: kafka-broker-1 # Broker'lardan birine ba\u011flanmas\u0131 yeterli\n    depends_on:\n      - kafka-broker-1\n      - kafka-broker-2\n      - kafka-broker-3\n    restart: always\n<\/pre>\n<p><\/code><\/p>\n<p><strong><code class=\"language-yaml\">docker-compose.yml<\/code> A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<ul>\n<li><code class=\"language-yaml\">version: '3.8'<\/code>: Docker Compose dosyas\u0131n\u0131n format s\u00fcr\u00fcm\u00fcn\u00fc belirtir.<\/li>\n<li><code class=\"language-yaml\">services<\/code>: Tan\u0131mlanacak t\u00fcm servisleri (kapsay\u0131c\u0131lar\u0131) i\u00e7erir.<\/li>\n<li><strong>zookeeper<\/strong>:\n<ul>\n<li><code class=\"language-yaml\">image<\/code>: Confluent'in resmi ZooKeeper imaj\u0131n\u0131 kullan\u0131yoruz.<\/li>\n<li><code class=\"language-yaml\">ports<\/code>: Yerel makinenizdeki 2181 portunu kapsay\u0131c\u0131n\u0131n 2181 portuna e\u015fler.<\/li>\n<li><code class=\"language-yaml\">environment<\/code>: ZooKeeper i\u00e7in gerekli ortam de\u011fi\u015fkenlerini ayarlar.<\/li>\n<\/ul>\n<\/li>\n<li><strong>kafka-broker-1, kafka-broker-2, kafka-broker-3<\/strong>:\n<ul>\n<li><code class=\"language-yaml\">image<\/code>: Confluent'in resmi Kafka imaj\u0131n\u0131 kullan\u0131yoruz.<\/li>\n<li><code class=\"language-yaml\">ports<\/code>: Her broker i\u00e7in farkl\u0131 bir d\u0131\u015f port (9092, 9093, 9094) kullanarak ayn\u0131 i\u00e7 porta (9092) y\u00f6nlendirme yap\u0131yoruz. Bu, yerel makinenizden her broker'a ayr\u0131 ayr\u0131 eri\u015fmenizi sa\u011flar.<\/li>\n<li><code class=\"language-yaml\">environment<\/code>:\n<ul>\n<li><code class=\"language-yaml\">KAFKA_BROKER_ID<\/code>: Her broker'\u0131n k\u00fcme i\u00e7inde benzersiz bir ID'si olmal\u0131d\u0131r. (1, 2, 3)<\/li>\n<li><code class=\"language-yaml\">KAFKA_ZOOKEEPER_CONNECT<\/code>: Kafka'n\u0131n ba\u011flanaca\u011f\u0131 ZooKeeper servisini belirtir. (\u00d6rn: <code class=\"language-bash\">zookeeper:2181<\/code>)<\/li>\n<li><code class=\"language-yaml\">KAFKA_ADVERTISED_LISTENERS<\/code>: Bu kritik bir ayard\u0131r. Kafka broker'\u0131n\u0131n kendisini di\u011fer Kafka servislerine ve istemcilere (Producer\/Consumer) hangi adres ve portta duyuraca\u011f\u0131n\u0131 belirtir. \u0130\u00e7 a\u011f (Docker a\u011f\u0131) i\u00e7in <code class=\"language-bash\">PLAINTEXT:\/\/kafka-broker-1:29092<\/code> gibi bir yap\u0131 kullan\u0131rken, d\u0131\u015far\u0131dan eri\u015fim (yerel makine) i\u00e7in <code class=\"language-bash\">PLAINTEXT_HOST:\/\/localhost:9092<\/code> gibi bir yap\u0131 kullan\u0131r\u0131z.<\/li>\n<li><code class=\"language-yaml\">KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR<\/code>: Consumer offset'lerinin depoland\u0131\u011f\u0131 dahili <code class=\"language-bash\">__consumer_offsets<\/code> topic'i i\u00e7in \u00e7o\u011faltma fakt\u00f6r\u00fcd\u00fcr. Geli\u015ftirme ortam\u0131nda 1 olarak ayarlanmas\u0131 yeterlidir.<\/li>\n<\/ul>\n<\/li>\n<li><code class=\"language-yaml\">depends_on<\/code>: Kafka broker'lar\u0131n\u0131n ZooKeeper servisi ba\u015flamadan ba\u015flamamas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<\/li>\n<li><strong>kafka-ui<\/strong>: Kafka k\u00fcmesini izlemek ve y\u00f6netmek i\u00e7in pop\u00fcler bir web aray\u00fcz\u00fc olan Kafka UI'y\u0131 ekliyoruz.\n<ul>\n<li><code class=\"language-yaml\">ports<\/code>: Yerel makinenizdeki 8080 portunu Kafka UI'\u0131n 8080 portuna e\u015fler.<\/li>\n<li><code class=\"language-yaml\">environment<\/code>: Kafka UI'\u0131n hangi Kafka broker'lar\u0131na ba\u011flanaca\u011f\u0131n\u0131 ve k\u00fcmenin ad\u0131n\u0131 belirtiriz. <code class=\"language-yaml\">KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS<\/code> k\u0131sm\u0131nda, broker'lar\u0131n Docker i\u00e7indeki adreslerini (\u00d6rn: <code class=\"language-bash\">kafka-broker-1:29092<\/code>) virg\u00fclle ay\u0131rarak belirtiriz.<\/li>\n<li><code class=\"language-yaml\">depends_on<\/code>: T\u00fcm Kafka broker'lar\u0131n\u0131n ba\u015flamas\u0131n\u0131 bekler.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: <code class=\"language-yaml\">KAFKA_ADVERTISED_LISTENERS<\/code> ayar\u0131, \u00f6zellikle Docker ortamlar\u0131nda veya NAT arkas\u0131nda \u00e7al\u0131\u015fan Kafka k\u00fcmelerinde do\u011fru yap\u0131land\u0131r\u0131lmas\u0131 gereken en kritik ayarlardan biridir. Yanl\u0131\u015f ayarland\u0131\u011f\u0131nda producer veya consumer'lar broker'lara ba\u011flanmakta sorun ya\u015fayabilir. \u0130\u00e7 ve d\u0131\u015f eri\u015fim i\u00e7in ayr\u0131 dinleyiciler tan\u0131mlamak en iyi yakla\u015f\u0131md\u0131r.\n<\/div>\n<h3>K\u00fcmemizi Aya\u011fa Kald\u0131rma ve Durumunu Kontrol Etme<\/h3>\n<p>\u015eimdi terminalinizi veya komut istemcinizi a\u00e7\u0131n ve <code class=\"language-bash\">docker-cluster<\/code> klas\u00f6r\u00fcne gidin:<\/p>\n<pre><code class=\"language-bash\">\ncd path\/to\/your\/kafka-cluster\n<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, t\u00fcm servisleri aya\u011fa kald\u0131rmak i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">\ndocker-compose up -d\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Docker Compose dosyas\u0131ndaki t\u00fcm servisleri arka planda (<code class=\"language-bash\">-d<\/code> detach modu) ba\u015flatacakt\u0131r. \u0130majlar\u0131n indirilmesi biraz zaman alabilir, bu tamamen internet h\u0131z\u0131n\u0131za ba\u011fl\u0131d\u0131r.<\/p>\n<p>Servislerin durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\ndocker-compose ps\n<\/pre>\n<p><\/code><\/p>\n<p>\u00c7\u0131kt\u0131da t\u00fcm servislerin <code class=\"language-bash\">Up<\/code> durumunda oldu\u011funu g\u00f6rmelisiniz.<\/p>\n<p>Herhangi bir servisin loglar\u0131n\u0131 izlemek i\u00e7in (\u00f6rne\u011fin kafka-broker-1):<\/p>\n<pre><code class=\"language-bash\">\ndocker-compose logs -f kafka-broker-1\n<\/pre>\n<p><\/code><\/p>\n<p>K\u00fcmenizi durdurmak ve kald\u0131rmak i\u00e7in (container'lar, a\u011flar ve volume'ler dahil):<\/p>\n<pre><code class=\"language-bash\">\ndocker-compose down -v\n<\/pre>\n<p><\/code><\/p>\n<p>Art\u0131k 3-broker'l\u0131 Kafka k\u00fcmeniz ve bir y\u00f6netim aray\u00fcz\u00fc olan Kafka UI (http:\/\/localhost:8080 adresinden eri\u015filebilir) haz\u0131r! Bu temel kurulum, Kafka'n\u0131n g\u00fc\u00e7l\u00fc \u00f6zelliklerini ke\u015ffetmek i\u00e7in sa\u011flam bir zemin sunuyor.<\/p>\n<h2>Kafka K\u00fcmemizde Veri Ak\u0131\u015f\u0131: Producer ve Consumer Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h2>\n<p>K\u00fcmemizi kurduk, \u015fimdi s\u0131rada bu k\u00fcme \u00fczerinde ger\u00e7ek bir veri ak\u0131\u015f\u0131 yaratmak var. Kafka'n\u0131n kalbinde, verilerin \u00fcreticiler (Producer) taraf\u0131ndan topic'lere yaz\u0131lmas\u0131 ve t\u00fcketiciler (Consumer) taraf\u0131ndan bu topic'lerden okunmas\u0131 yatar. Bu b\u00f6l\u00fcmde, basit komut sat\u0131r\u0131 ara\u00e7lar\u0131n\u0131 kullanarak bir topic olu\u015fturacak, mesaj g\u00f6nderecek ve bu mesajlar\u0131 t\u00fcketece\u011fiz.<\/p>\n<h3>\u00d6rnek Bir Konu (Topic) Olu\u015fturma<\/h3>\n<p>Veri g\u00f6ndermeden \u00f6nce mesajlar\u0131 kategorize edece\u011fimiz bir topic'e ihtiyac\u0131m\u0131z var. Kafka'n\u0131n kendi komut sat\u0131r\u0131 ara\u00e7lar\u0131 (Docker container'\u0131 i\u00e7inden eri\u015filebilir) ile bu i\u015flemi ger\u00e7ekle\u015ftirebiliriz. <code class=\"language-bash\">kafka-broker-1<\/code> container'\u0131 i\u00e7inden topic olu\u015fturma komutunu \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z. Bu komutu \u00e7al\u0131\u015ft\u0131rmak i\u00e7in \u00f6ncelikle bir broker container'\u0131 i\u00e7ine girmemiz gerekiyor:<\/p>\n<pre><code class=\"language-bash\">\ndocker exec -it kafka-broker-1 bash\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi container i\u00e7indeyiz. Topic olu\u015fturma komutu:<\/p>\n<pre><code class=\"language-bash\">\nkafka-topics --create --topic my-first-topic --bootstrap-server kafka-broker-1:29092,kafka-broker-2:29093,kafka-broker-3:29094 --partitions 3 --replication-factor 3\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Komut A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<ul>\n<li><code class=\"language-bash\">kafka-topics<\/code>: Kafka topic y\u00f6netimi i\u00e7in kullan\u0131lan ara\u00e7.<\/li>\n<li><code class=\"language-bash\">--create<\/code>: Yeni bir topic olu\u015fturma emri.<\/li>\n<li><code class=\"language-bash\">--topic my-first-topic<\/code>: Olu\u015fturulacak topic'in ad\u0131.<\/li>\n<li><code class=\"language-bash\">--bootstrap-server kafka-broker-1:29092,kafka-broker-2:29093,kafka-broker-3:29094<\/code>: Kafka k\u00fcmesindeki broker'lar\u0131n adreslerini belirtir. Burada Docker i\u00e7 a\u011f\u0131ndaki adresleri kullan\u0131yoruz.<\/li>\n<li><code class=\"language-bash\">--partitions 3<\/code>: Topic'in 3 ayr\u0131 b\u00f6l\u00fcme ayr\u0131laca\u011f\u0131n\u0131 belirtir. Bu, veri paralel i\u015fleme ve \u00f6l\u00e7eklenebilirlik i\u00e7in \u00f6nemlidir.<\/li>\n<li><code class=\"language-bash\">--replication-factor 3<\/code>: Her bir partition'\u0131n 3 farkl\u0131 broker'da kopyalanaca\u011f\u0131n\u0131 belirtir. Bu, y\u00fcksek eri\u015filebilirlik ve veri dayan\u0131kl\u0131l\u0131\u011f\u0131 sa\u011flar. Bir broker \u00e7evrimd\u0131\u015f\u0131 kalsa bile veriler kaybolmaz.<\/li>\n<\/ul>\n<p>\u00c7\u0131kt\u0131da <code class=\"language-bash\">Created topic my-first-topic.<\/code> benzeri bir mesaj g\u00f6rmelisiniz. Art\u0131k container'dan <code class=\"language-bash\">exit<\/code> yazarak \u00e7\u0131kabilirsiniz.<\/p>\n<h3>Mesaj \u00dcreticisi (Producer) ile Veri G\u00f6nderme<\/h3>\n<p>\u015eimdi olu\u015fturdu\u011fumuz topic'e mesaj g\u00f6nderelim. Yine <code class=\"language-bash\">kafka-broker-1<\/code> container'\u0131 i\u00e7inden komut sat\u0131r\u0131 producer'\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabiliriz:<\/p>\n<pre><code class=\"language-bash\">\ndocker exec -it kafka-broker-1 bash\n<\/pre>\n<p><\/code><\/p>\n<p>Container i\u00e7inde, mesaj g\u00f6ndermek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\nkafka-console-producer --topic my-first-topic --bootstrap-server kafka-broker-1:29092,kafka-broker-2:29093,kafka-broker-3:29094\n<\/pre>\n<p><\/code><\/p>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, yan\u0131p s\u00f6nen bir imle\u00e7 g\u00f6receksiniz. Buraya istedi\u011finiz mesajlar\u0131 yaz\u0131p Enter tu\u015funa basarak g\u00f6nderebilirsiniz:<\/p>\n<pre><code class=\"language-text\">\nMerhaba Kafka!\nBu benim ilk mesaj\u0131m.\nUygulamal\u0131 \u00f6\u011frenmek harika!\n<\/pre>\n<p><\/code><\/p>\n<p>Mesajlar\u0131 g\u00f6ndermeyi bitirdi\u011finizde <code class=\"language-bash\">Ctrl+C<\/code> tu\u015f kombinasyonu ile producer'dan \u00e7\u0131kabilirsiniz. Ard\u0131ndan container'dan da <code class=\"language-bash\">exit<\/code> yazarak \u00e7\u0131k\u0131n.<\/p>\n<h3>Mesaj T\u00fcketicisi (Consumer) ile Veri Alma<\/h3>\n<p>G\u00f6nderdi\u011fimiz mesajlar\u0131 \u015fimdi t\u00fcketelim. Ba\u015fka bir terminal penceresi a\u00e7\u0131n (veya ayn\u0131 terminalde farkl\u0131 bir sekme) ve yine bir Kafka broker container'\u0131 i\u00e7ine girin (\u00f6rne\u011fin <code class=\"language-bash\">kafka-broker-2<\/code> bu sefer farkl\u0131 bir broker kullanal\u0131m):<\/p>\n<pre><code class=\"language-bash\">\ndocker exec -it kafka-broker-2 bash\n<\/pre>\n<p><\/code><\/p>\n<p>Container i\u00e7inde, mesajlar\u0131 t\u00fcketmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\nkafka-console-consumer --topic my-first-topic --bootstrap-server kafka-broker-1:29092,kafka-broker-2:29093,kafka-broker-3:29094 --from-beginning\n<\/pre>\n<p><\/code><\/p>\n<p><strong>Komut A\u00e7\u0131klamas\u0131:<\/strong><\/p>\n<ul>\n<li><code class=\"language-bash\">kafka-console-consumer<\/code>: Kafka topic'lerinden mesaj t\u00fcketmek i\u00e7in kullan\u0131lan ara\u00e7.<\/li>\n<li><code class=\"language-bash\">--from-beginning<\/code>: Topic'teki t\u00fcm mevcut mesajlar\u0131 ba\u015ftan itibaren okumak i\u00e7in kullan\u0131l\u0131r. Bu parametre olmadan, t\u00fcketici sadece komut \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131ktan sonra gelen mesajlar\u0131 okur.<\/li>\n<\/ul>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, daha \u00f6nce g\u00f6nderdi\u011finiz mesajlar\u0131 terminalde g\u00f6rmelisiniz:<\/p>\n<pre><code class=\"language-text\">\nMerhaba Kafka!\nBu benim ilk mesaj\u0131m.\nUygulamal\u0131 \u00f6\u011frenmek harika!\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi ba\u015fka bir terminalde producer'\u0131 tekrar ba\u015flat\u0131p yeni mesajlar g\u00f6ndermeyi deneyin. Consumer penceresinde bu yeni mesajlar\u0131n an\u0131nda belirdi\u011fini g\u00f6receksiniz. Bu, Kafka'n\u0131n ger\u00e7ek zamanl\u0131 veri ak\u0131\u015f\u0131 yetene\u011fini g\u00f6sterir.<\/p>\n<h3>Ger\u00e7ek D\u00fcnya Senaryosu: Mikroservis \u0130leti\u015fimi<\/h3>\n<p>Bu temel Producer\/Consumer yap\u0131s\u0131n\u0131 bir e-ticaret senaryosuna uyarlayal\u0131m. Bir sipari\u015f uygulamas\u0131n\u0131n yeni sipari\u015fleri bir Kafka topic'ine <code class=\"language-bash\">('new-orders')<\/code> g\u00f6nderdi\u011fini hayal edin. Bu, \"Sipari\u015f Producer\" g\u00f6revini \u00fcstlenir.<\/p>\n<p>Ard\u0131ndan, farkl\u0131 mikroservisler ayn\u0131 <code class=\"language-bash\">new-orders<\/code> topic'inden e\u015f zamanl\u0131 olarak mesajlar\u0131 t\u00fcketebilir:<\/p>\n<ul>\n<li><strong>\u00d6deme Servisi (Consumer)<\/strong>: Yeni sipari\u015fleri al\u0131r ve \u00f6deme i\u015flemlerini ba\u015flat\u0131r.<\/li>\n<li><strong>Envanter Servisi (Consumer)<\/strong>: Yeni sipari\u015fleri al\u0131r ve stok g\u00fcncellemelerini yapar.<\/li>\n<li><strong>Bildirim Servisi (Consumer)<\/strong>: Yeni sipari\u015fleri al\u0131r ve m\u00fc\u015fteriye sipari\u015f onay\u0131 e-postas\u0131 veya SMS g\u00f6nderir.<\/li>\n<li><strong>Analitik Servisi (Consumer)<\/strong>: Yeni sipari\u015fleri al\u0131r ve ger\u00e7ek zamanl\u0131 sat\u0131\u015f verilerini i\u015fler.<\/li>\n<\/ul>\n<p>Bu senaryoda, her bir servis ba\u011f\u0131ms\u0131zd\u0131r ve kendi h\u0131z\u0131nda \u00e7al\u0131\u015f\u0131r. Sipari\u015f uygulamas\u0131, t\u00fcm t\u00fcketicilerin haz\u0131r olup olmad\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnmeden sipari\u015fleri Kafka'ya b\u0131rakabilir. Kafka, mesajlar\u0131n g\u00fcvenli bir \u015fekilde depolanmas\u0131n\u0131 ve t\u00fcm t\u00fcketicilere iletilmesini garanti eder. E\u011fer Envanter Servisi ge\u00e7ici olarak \u00e7evrimd\u0131\u015f\u0131 kal\u0131rsa, Kafka mesajlar\u0131 onun i\u00e7in bekletir ve tekrar \u00e7evrimi\u00e7i oldu\u011funda kald\u0131\u011f\u0131 yerden devam etmesini sa\u011flar. Bu, mikroservislerin esnek, dayan\u0131kl\u0131 ve \u00f6l\u00e7eklenebilir olmas\u0131n\u0131 sa\u011flayan temel bir modeldir.<\/p>\n<p>Bu basit \u00f6rnekler ve senaryo, Kafka'n\u0131n da\u011f\u0131t\u0131k sistemlerde veri ak\u0131\u015f\u0131n\u0131 nas\u0131l kolayla\u015ft\u0131rd\u0131\u011f\u0131n\u0131 ve farkl\u0131 servisler aras\u0131nda g\u00fcvenilir bir ileti\u015fim k\u00f6pr\u00fcs\u00fc kurdu\u011funu a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Art\u0131k kendi k\u00fcmenizle deney yapmaya haz\u0131rs\u0131n\u0131z!<\/p>\n<h2>Performans ve Y\u00f6netim \u0130pu\u00e7lar\u0131: Kafka'y\u0131 Daha Verimli Kullanmak<\/h2>\n<p>Kendi Kafka k\u00fcmenizi ba\u015far\u0131yla kurdunuz ve \u00fczerinde veri ak\u0131\u015f\u0131n\u0131 deneyimlediniz. \u015eimdi, bu g\u00fc\u00e7l\u00fc platformu daha verimli kullanmak, performans\u0131n\u0131 optimize etmek ve y\u00f6netimini kolayla\u015ft\u0131rmak i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131na g\u00f6z atal\u0131m. Bu pratik bilgiler, Kafka'y\u0131 geli\u015ftirme ortam\u0131n\u0131zdan daha b\u00fcy\u00fck \u00f6l\u00e7ekli projelere ta\u015f\u0131rken size rehberlik edecektir.<\/p>\n<h3>\u0130zleme ve Y\u00f6netim Ara\u00e7lar\u0131: Kafka UI\/Control Center<\/h3>\n<p>Komut sat\u0131r\u0131, Kafka'y\u0131 \u00f6\u011frenmek i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131 olsa da, b\u00fcy\u00fck bir k\u00fcmenin veya \u00e7ok say\u0131da topic'in y\u00f6netimini ve izlenmesini zorla\u015ft\u0131rabilir. \u0130\u015fte burada Kafka UI gibi ara\u00e7lar devreye girer. Bizim <code class=\"language-yaml\">docker-compose.yml<\/code> dosyam\u0131zda da yer alan <a href=\"http:\/\/localhost:8080\" target=\"_blank\">Kafka UI<\/a>, web tabanl\u0131 bir aray\u00fczd\u00fcr ve \u015funlar\u0131 sa\u011flar:<\/p>\n<ul>\n<li>Topic'leri, partition'lar\u0131 ve broker'lar\u0131 g\u00f6r\u00fcnt\u00fcleme.<\/li>\n<li>Topic'lerin i\u00e7ine bakarak mesajlar\u0131 g\u00f6rme ve arama.<\/li>\n<li>Consumer group'lar\u0131 ve onlar\u0131n offset'lerini takip etme.<\/li>\n<li>Yeni topic'ler olu\u015fturma veya mevcut topic'leri silme (dikkatli olun!).<\/li>\n<\/ul>\n<p>Kafka UI, geli\u015ftirme ve test ortamlar\u0131 i\u00e7in olduk\u00e7a yeterli bir ara\u00e7t\u0131r. \u00dcretim ortamlar\u0131 i\u00e7in ise Confluent Control Center (Confluent platformunun bir par\u00e7as\u0131d\u0131r) veya Apache Kafka'n\u0131n kendi izleme ara\u00e7lar\u0131 gibi daha kapsaml\u0131 \u00e7\u00f6z\u00fcmler mevcuttur. Bu t\u00fcr ara\u00e7lar, Kafka k\u00fcmenizin sa\u011fl\u0131\u011f\u0131n\u0131, performans metriklerini (\u00fcretici\/t\u00fcketici gecikmeleri, disk kullan\u0131m\u0131, a\u011f trafi\u011fi vb.) ger\u00e7ek zamanl\u0131 olarak izlemenize olanak tan\u0131r ve olas\u0131 sorunlar\u0131 proaktif olarak tespit etmenize yard\u0131mc\u0131 olur.<\/p>\n<h3>Veri B\u00fct\u00fcnl\u00fc\u011f\u00fc ve Tolerans: Replication Factor ve Acks<\/h3>\n<p>Kafka'n\u0131n en \u00f6nemli avantajlar\u0131ndan biri veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve hata tolerans\u0131d\u0131r. Bu \u00f6zellikleri do\u011fru \u015fekilde kullanmak, sisteminizin dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<ul>\n<li><strong>Replication Factor (\u00c7o\u011faltma Fakt\u00f6r\u00fc)<\/strong>: Bir topic olu\u015ftururken <code class=\"language-bash\">--replication-factor<\/code> parametresini kullanm\u0131\u015ft\u0131k. Bu, her partition'\u0131n ka\u00e7 farkl\u0131 broker'da kopyas\u0131n\u0131n tutulaca\u011f\u0131n\u0131 belirler. \u00d6rne\u011fin, <code class=\"language-bash\">replication-factor 3<\/code>, her partition'\u0131n 3 farkl\u0131 broker'da bir ana (leader) ve iki yedek (follower) kopyas\u0131n\u0131n olaca\u011f\u0131 anlam\u0131na gelir. Bir broker ar\u0131zaland\u0131\u011f\u0131nda, yedeklerden biri otomatik olarak yeni lider olur ve veri kayb\u0131 ya\u015fanmaz. \u00dcretim ortamlar\u0131nda genellikle 3 olarak ayarlan\u0131r. Bu ayar\u0131 d\u00fc\u015f\u00fcrmek performans\u0131 art\u0131rabilir ancak veri kayb\u0131 riskini y\u00fckseltir.<\/li>\n<li><strong>Acks (Acknowledgements)<\/strong>: Producer'lar\u0131n mesaj g\u00f6nderirken broker'lardan bekledi\u011fi onay seviyesini belirler.\n<ul>\n<li><code class=\"language-bash\">acks=0<\/code>: Producer mesaj\u0131 g\u00f6nderir ve herhangi bir onay beklemez. En d\u00fc\u015f\u00fck gecikme, en y\u00fcksek potansiyel veri kayb\u0131 riski.<\/li>\n<li><code class=\"language-bash\">acks=1<\/code>: Producer, mesaj\u0131n partition'\u0131n liderine yaz\u0131ld\u0131\u011f\u0131n\u0131 onaylad\u0131ktan sonra devam eder. Orta seviye gecikme ve daha az veri kayb\u0131 riski.<\/li>\n<li><code class=\"language-bash\">acks=all<\/code> (veya <code class=\"language-bash\">acks=-1<\/code>): Producer, mesaj\u0131n lider taraf\u0131ndan yaz\u0131ld\u0131\u011f\u0131n\u0131 ve t\u00fcm in-sync yedeklere (ISR) \u00e7o\u011falt\u0131ld\u0131\u011f\u0131n\u0131 onaylad\u0131ktan sonra devam eder. En y\u00fcksek gecikme, ancak veri kayb\u0131 riski neredeyse s\u0131f\u0131rd\u0131r. Kritik veriler i\u00e7in bu ayar tercih edilir.<\/li>\n<\/ul>\n<p>        Do\u011fru <code class=\"language-bash\">acks<\/code> ayar\u0131, uygulaman\u0131z\u0131n veri g\u00fcvenli\u011fi gereksinimleri ile performans beklentileri aras\u0131ndaki dengeye ba\u011fl\u0131d\u0131r.<\/li>\n<\/ul>\n<h3>Disk Alan\u0131 ve A\u011f Kullan\u0131m\u0131 Optimizasyonu<\/h3>\n<p>Kafka, verileri diskte depolar ve bu da disk alan\u0131 y\u00f6netimi gerektirir. Ayr\u0131ca, yo\u011fun veri ak\u0131\u015f\u0131 a\u011f kaynaklar\u0131n\u0131 t\u00fcketebilir.<\/p>\n<ul>\n<li><strong>Mesaj S\u0131k\u0131\u015ft\u0131rma<\/strong>: Producer'lar, mesajlar\u0131 broker'a g\u00f6ndermeden \u00f6nce s\u0131k\u0131\u015ft\u0131rabilirler (gzip, snappy, lz4 gibi algoritmalarla). Bu, a\u011f bant geni\u015fli\u011fini azalt\u0131r ve disk alan\u0131 tasarrufu sa\u011flar. T\u00fcketiciler, s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f mesajlar\u0131 otomatik olarak a\u00e7ar. Performans \u00fczerinde minimal bir etkiyle b\u00fcy\u00fck faydalar sa\u011flayabilir.<\/li>\n<li><strong>Log Retention (G\u00fcnl\u00fck Tutma)<\/strong>: Kafka, mesajlar\u0131 belirli bir s\u00fcre veya belirli bir boyuta ula\u015fana kadar saklar. Topic baz\u0131nda <code class=\"language-bash\">retention.ms<\/code> (mesaj\u0131n ne kadar s\u00fcre saklanaca\u011f\u0131) ve <code class=\"language-bash\">retention.bytes<\/code> (partition'\u0131n diskte ne kadar yer kaplayaca\u011f\u0131) ayarlar\u0131n\u0131 yap\u0131land\u0131rarak disk kullan\u0131m\u0131n\u0131 kontrol edebilirsiniz. Varsay\u0131lan olarak 7 g\u00fcn veya belirli bir boyuta ula\u015fana kadar saklan\u0131r. \u0130htiya\u00e7lar\u0131n\u0131za g\u00f6re bu ayarlar\u0131 de\u011fi\u015ftirmek \u00f6nemlidir.<\/li>\n<li><strong>Donan\u0131m Se\u00e7imi<\/strong>: \u00dcretim ortamlar\u0131nda Kafka i\u00e7in SSD diskler, y\u00fcksek a\u011f bant geni\u015fli\u011fi ve yeterli RAM, genel performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu, \u00f6zellikle y\u00fcksek throughput ve d\u00fc\u015f\u00fck gecikme gerektiren uygulamalar i\u00e7in kritiktir.<\/li>\n<\/ul>\n<p>Bu ipu\u00e7lar\u0131, Kafka k\u00fcmenizi daha g\u00fcvenilir, performansl\u0131 ve y\u00f6netilebilir hale getirmenize yard\u0131mc\u0131 olacakt\u0131r. Unutmay\u0131n, her sistemin kendine \u00f6zg\u00fc gereksinimleri vard\u0131r, bu y\u00fczden bu ayarlar\u0131 kendi kullan\u0131m durumunuza g\u00f6re test etmek ve optimize etmek \u00f6nemlidir.<\/p>\n<h2>Sonu\u00e7: Kafka Maceran\u0131z Daha Yeni Ba\u015fl\u0131yor!<\/h2>\n<p>Bu makale boyunca, Apache Kafka'n\u0131n modern veri ak\u0131\u015f\u0131 mimarilerindeki \u00f6nemini, temel bile\u015fenlerini ve Docker Compose ile nas\u0131l h\u0131zl\u0131ca 3-broker'l\u0131 bir k\u00fcme kurabilece\u011fimizi detayl\u0131 bir \u015fekilde inceledik. Kendi ellerinizle bir Kafka k\u00fcmesi kurmak, topic olu\u015fturmak, mesaj \u00fcretip t\u00fcketmek ve hatta bir y\u00f6netim aray\u00fcz\u00fc kullanmak, Kafka'n\u0131n g\u00fcc\u00fcn\u00fc ve esnekli\u011fini pratik bir \u015fekilde deneyimlemenizi sa\u011flam\u0131\u015ft\u0131r. Bu uygulamal\u0131 yakla\u015f\u0131m, karma\u015f\u0131k da\u011f\u0131t\u0131k sistemlerin alt\u0131nda yatan prensipleri anlamak i\u00e7in en etkili yollardan biridir.<\/p>\n<p>Kafka'n\u0131n y\u00fcksek eri\u015filebilirlik, \u00f6l\u00e7eklenebilirlik ve hata tolerans\u0131 gibi \u00f6zellikleri, onu g\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 uygulamalar\u0131 i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getiriyor. Mikroservisler aras\u0131 ileti\u015fimin omurgas\u0131 olmaktan, ger\u00e7ek zamanl\u0131 veri i\u015fleme ve analitik boru hatlar\u0131n\u0131n temeline kadar geni\u015f bir kullan\u0131m alan\u0131na sahiptir. Bu rehber, Kafka \u00f6\u011frenme yolculu\u011funuzun sadece ba\u015flang\u0131c\u0131d\u0131r. \u015eimdi \u00f6\u011frendiklerinizi kullanarak daha karma\u015f\u0131k senaryolar\u0131 denemeye, farkl\u0131 producer ve consumer k\u00fct\u00fcphaneleriyle \u00e7al\u0131\u015fmaya ve ger\u00e7ek uygulamalar geli\u015ftirmeye ba\u015flayabilirsiniz. Kafka d\u00fcnyas\u0131nda ke\u015ffedilecek \u00e7ok daha fazlas\u0131 var!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>1. \u00dcretim ortam\u0131nda da Docker Compose kullanabilir miyim?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Geli\u015ftirme ve test ortamlar\u0131 i\u00e7in Docker Compose m\u00fckemmel bir ara\u00e7t\u0131r. Ancak \u00fcretim ortamlar\u0131 i\u00e7in genellikle Kubernetes gibi daha geli\u015fmi\u015f container orchestrasyon platformlar\u0131 veya Helm chart'lar\u0131 tercih edilir. Bunun nedeni, Kubernetes'in otomatik \u00f6l\u00e7eklendirme, kendini iyile\u015ftirme, daha sofistike a\u011f ve depolama y\u00f6netimi gibi \u00fcretim d\u00fczeyinde ihtiya\u00e7 duyulan yetenekleri sa\u011flamas\u0131d\u0131r. Docker Compose, tek sunuculu (single-host) ortamlar i\u00e7in tasarlanm\u0131\u015fken, Kubernetes \u00e7ok sunuculu (multi-host) ve y\u00fcksek eri\u015filebilirli\u011fe sahip ortamlar i\u00e7in idealdir.<\/p>\n<p><strong>2. Kafka yerine ba\u015fka bir mesaj kuyru\u011fu sistemi kullanabilir miyim?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Elbette. Kafka, \u00f6zellikle y\u00fcksek hacimli ger\u00e7ek zamanl\u0131 veri ak\u0131\u015f\u0131 ve olay tabanl\u0131 mimariler i\u00e7in tasarlanm\u0131\u015ft\u0131r. Ancak daha geleneksel mesaj kuyru\u011fu ihtiya\u00e7lar\u0131n\u0131z varsa, RabbitMQ veya ActiveMQ gibi \u00e7\u00f6z\u00fcmler de de\u011ferlendirilebilir. Bu sistemler, genellikle daha d\u00fc\u015f\u00fck gecikme s\u00fcresi gerektiren, daha \u00e7ok istek\/cevap (request\/response) tarz\u0131 ileti\u015fimler i\u00e7in uygundur. Se\u00e7im, projenizin spesifik gereksinimlerine, veri hacmine, gecikme beklentilerine ve hata tolerans\u0131 ihtiya\u00e7lar\u0131na ba\u011fl\u0131d\u0131r.<\/p>\n<p><strong>3. Kafka'da veri depolama s\u00fcresini nas\u0131l ayarlar\u0131m?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Kafka'da verilerin diskte ne kadar s\u00fcre saklanaca\u011f\u0131n\u0131 (log retention) topic baz\u0131nda veya broker baz\u0131nda ayarlayabilirsiniz. En yayg\u0131n kullan\u0131lan ayarlar \u015funlard\u0131r:<\/p>\n<ul>\n<li><code class=\"language-bash\">retention.ms<\/code>: Mesajlar\u0131n milisaniye cinsinden ne kadar s\u00fcre saklanaca\u011f\u0131n\u0131 belirtir. \u00d6rne\u011fin, 604800000 ms (7 g\u00fcn).<\/li>\n<li><code class=\"language-bash\">retention.bytes<\/code>: Bir partition'\u0131n diskte tutabilece\u011fi maksimum veri boyutunu bayt cinsinden belirtir. Bu s\u0131n\u0131ra ula\u015f\u0131ld\u0131\u011f\u0131nda en eski mesajlar silinir.<\/li>\n<\/ul>\n<p>Bu ayarlar\u0131 topic olu\u015ftururken veya mevcut bir topic'i g\u00fcncellerken <code class=\"language-bash\">kafka-configs<\/code> arac\u0131yla yapabilirsiniz. \u00d6rne\u011fin, mevcut bir topic'i g\u00fcncellemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">\ndocker exec -it kafka-broker-1 kafka-configs --bootstrap-server kafka-broker-1:29092 --alter --topic my-first-topic --add-config retention.ms=86400000\n<\/pre>\n<p><\/code><br \/>\n(Bu komut, <code class=\"language-bash\">my-first-topic<\/code> adl\u0131 topic'in mesaj saklama s\u00fcresini 1 g\u00fcne ayarlar.)<\/p>\n<p><strong>4. Kafka k\u00fcmemi geli\u015ftirmek i\u00e7in hangi kaynaklar\u0131 kullanabilirim?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Kafka'y\u0131 daha derinlemesine \u00f6\u011frenmek i\u00e7in bir\u00e7ok harika kaynak bulunmaktad\u0131r:<\/p>\n<ul>\n<li><strong>Apache Kafka Resmi Dok\u00fcmantasyonu<\/strong>: En do\u011fru ve g\u00fcncel bilgi kayna\u011f\u0131d\u0131r.<\/li>\n<li><strong>Confluent Blog ve Dok\u00fcmantasyon<\/strong>: Confluent, Kafka'n\u0131n arkas\u0131ndaki \u015firket olup, \u00e7ok say\u0131da a\u00e7\u0131klay\u0131c\u0131 blog yaz\u0131s\u0131 ve derinlemesine dok\u00fcmantasyon sunar.<\/li>\n<li><strong>\u00c7evrimi\u00e7i Kurslar<\/strong>: Udemy, Coursera gibi platformlarda Kafka'ya \u00f6zel kurslar bulabilirsiniz.<\/li>\n<li><strong>Kitaplar<\/strong>: \"Kafka: The Definitive Guide\" gibi kitaplar, konuyu kapsaml\u0131 bir \u015fekilde ele al\u0131r.<\/li>\n<li><strong>Topluluk Forumlar\u0131 ve GitHub<\/strong>: Sorular\u0131n\u0131z\u0131 sormak ve di\u011fer geli\u015ftiricilerle etkile\u015fim kurmak i\u00e7in harika yerlerdir.<\/li>\n<\/ul>\n<p><strong>5. Bu k\u00fcme yap\u0131s\u0131 mobil uygulamalar i\u00e7in nas\u0131l kullan\u0131labilir?<\/strong><\/p>\n<p><strong>Cevap:<\/strong> Do\u011frudan mobil uygulamalar\u0131n\u0131zdan bir Kafka k\u00fcmesine ba\u011flanmak genellikle iyi bir uygulama de\u011fildir. Bunun yerine, mobil uygulamalar\u0131n\u0131z, API Gateway veya arka u\u00e7 servisleriniz \u00fczerinden Kafka ile etkile\u015fime girmelidir. Mobil uygulama, bir REST API'ye istek g\u00f6nderir, bu arka u\u00e7 servisi Kafka'ya bir mesaj (producer) yazar veya Kafka'dan mesajlar\u0131 t\u00fcketip (consumer) mobil uygulamaya uygun formatta geri d\u00f6nd\u00fcr\u00fcr. Mobil uygulamalar\u0131n\u0131z\u0131n kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) tasarlarken, verileri ger\u00e7ek zamanl\u0131 olarak Kafka'dan alan bir arka u\u00e7 servisinin bu verileri mobil uyumlu (responsive) bir \u015fekilde sunabilmesi i\u00e7in modern web geli\u015ftirme tekniklerini (\u00f6rne\u011fin, CSS media query'ler, esnek d\u00fczenler) kullanman\u0131z gerekebilir. Bu, uygulaman\u0131z\u0131n farkl\u0131 ekran boyutlar\u0131na ve cihazlara dinamik olarak uyum sa\u011flamas\u0131n\u0131 sa\u011flar.<\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor.&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":[1407],"tags":[],"class_list":{"0":"post-34908","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","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>3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi<\/title>\n<meta name=\"description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor. Mikroservis mimarileri y\u00fckseli\u015fe ge\u00e7tik\u00e7e, bu karma\u015f\u0131k yap\u0131lar\u0131n birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak ise kritik bir ihtiya\u00e7 haline geldi. \u0130\u015fte tam bu noktada, Apache Kafka devreye giriyor. Peki, Kafka&#039;n\u0131n ger\u00e7ek g\u00fcc\u00fcn\u00fc ve da\u011f\u0131t\u0131k yap\u0131s\u0131n\u0131n avantajlar\u0131n\u0131 en iyi nas\u0131l deneyimleyebilirsiniz? Elbette, uygulamal\u0131 bir yakla\u015f\u0131mla, kendi \u00e7oklu broker&#039;l\u0131 k\u00fcmenizi kurarak!\" \/>\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\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor. Mikroservis mimarileri y\u00fckseli\u015fe ge\u00e7tik\u00e7e, bu karma\u015f\u0131k yap\u0131lar\u0131n birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak ise kritik bir ihtiya\u00e7 haline geldi. \u0130\u015fte tam bu noktada, Apache Kafka devreye giriyor. Peki, Kafka&#039;n\u0131n ger\u00e7ek g\u00fcc\u00fcn\u00fc ve da\u011f\u0131t\u0131k yap\u0131s\u0131n\u0131n avantajlar\u0131n\u0131 en iyi nas\u0131l deneyimleyebilirsiniz? Elbette, uygulamal\u0131 bir yakla\u015f\u0131mla, kendi \u00e7oklu broker&#039;l\u0131 k\u00fcmenizi kurarak!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-23T11:01:05+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=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi\",\"datePublished\":\"2025-11-23T11:01:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/\"},\"wordCount\":4709,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/\",\"name\":\"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-23T11:01:05+00:00\",\"description\":\"G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor. Mikroservis mimarileri y\u00fckseli\u015fe ge\u00e7tik\u00e7e, bu karma\u015f\u0131k yap\u0131lar\u0131n birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak ise kritik bir ihtiya\u00e7 haline geldi. \u0130\u015fte tam bu noktada, Apache Kafka devreye giriyor. Peki, Kafka'n\u0131n ger\u00e7ek g\u00fcc\u00fcn\u00fc ve da\u011f\u0131t\u0131k yap\u0131s\u0131n\u0131n avantajlar\u0131n\u0131 en iyi nas\u0131l deneyimleyebilirsiniz? Elbette, uygulamal\u0131 bir yakla\u015f\u0131mla, kendi \u00e7oklu broker'l\u0131 k\u00fcmenizi kurarak!\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi\"}]},{\"@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":"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi","description":"G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor. Mikroservis mimarileri y\u00fckseli\u015fe ge\u00e7tik\u00e7e, bu karma\u015f\u0131k yap\u0131lar\u0131n birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak ise kritik bir ihtiya\u00e7 haline geldi. \u0130\u015fte tam bu noktada, Apache Kafka devreye giriyor. Peki, Kafka'n\u0131n ger\u00e7ek g\u00fcc\u00fcn\u00fc ve da\u011f\u0131t\u0131k yap\u0131s\u0131n\u0131n avantajlar\u0131n\u0131 en iyi nas\u0131l deneyimleyebilirsiniz? Elbette, uygulamal\u0131 bir yakla\u015f\u0131mla, kendi \u00e7oklu broker'l\u0131 k\u00fcmenizi kurarak!","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\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/","og_locale":"tr_TR","og_type":"article","og_title":"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi","og_description":"G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor. Mikroservis mimarileri y\u00fckseli\u015fe ge\u00e7tik\u00e7e, bu karma\u015f\u0131k yap\u0131lar\u0131n birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak ise kritik bir ihtiya\u00e7 haline geldi. \u0130\u015fte tam bu noktada, Apache Kafka devreye giriyor. Peki, Kafka'n\u0131n ger\u00e7ek g\u00fcc\u00fcn\u00fc ve da\u011f\u0131t\u0131k yap\u0131s\u0131n\u0131n avantajlar\u0131n\u0131 en iyi nas\u0131l deneyimleyebilirsiniz? Elbette, uygulamal\u0131 bir yakla\u015f\u0131mla, kendi \u00e7oklu broker'l\u0131 k\u00fcmenizi kurarak!","og_url":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-23T11:01:05+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi","datePublished":"2025-11-23T11:01:05+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/"},"wordCount":4709,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/","url":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/","name":"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-23T11:01:05+00:00","description":"G\u00fcn\u00fcm\u00fcz\u00fcn veri odakl\u0131 d\u00fcnyas\u0131nda, sistemler aras\u0131 h\u0131zl\u0131 ve g\u00fcvenilir veri ak\u0131\u015f\u0131, uygulama performans\u0131n\u0131n ve kullan\u0131c\u0131 deneyiminin temelini olu\u015fturuyor. Mikroservis mimarileri y\u00fckseli\u015fe ge\u00e7tik\u00e7e, bu karma\u015f\u0131k yap\u0131lar\u0131n birbirleriyle tutarl\u0131 bir \u015fekilde konu\u015fmas\u0131n\u0131 sa\u011flamak ise kritik bir ihtiya\u00e7 haline geldi. \u0130\u015fte tam bu noktada, Apache Kafka devreye giriyor. Peki, Kafka'n\u0131n ger\u00e7ek g\u00fcc\u00fcn\u00fc ve da\u011f\u0131t\u0131k yap\u0131s\u0131n\u0131n avantajlar\u0131n\u0131 en iyi nas\u0131l deneyimleyebilirsiniz? Elbette, uygulamal\u0131 bir yakla\u015f\u0131mla, kendi \u00e7oklu broker'l\u0131 k\u00fcmenizi kurarak!","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/3-broker-kafka-cluster-docker-compose-ile-uygulamali-kafka-ogrenimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"3-Broker Kafka Cluster: Docker Compose ile Uygulamal\u0131 Kafka \u00d6\u011frenimi"}]},{"@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\/34908","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=34908"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34908\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}