{"id":927,"date":"2016-10-26T00:28:02","date_gmt":"2016-10-25T21:28:02","guid":{"rendered":"https:\/\/gokhan-gokalp.com\/?p=927"},"modified":"2016-10-26T00:28:02","modified_gmt":"2016-10-25T21:28:02","slug":"apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris","status":"publish","type":"post","link":"https:\/\/gokhan-gokalp.com\/tr\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/","title":{"rendered":"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f"},"content":{"rendered":"<p>Merhaba arkada\u015flar.<\/p>\n<p>Bir \u00f6nceki <em><a href=\"https:\/\/gokhan-gokalp.com\/apache-kafka-nedir\/\" target=\"_blank\">Apache Kafka Serisi 01 \u2013 Apache Kafka\u2019ya Giri\u015f<\/a>\u00a0<\/em>makalesinde, Apache Kafka&#8217;n\u0131n\u00a0ne oldu\u011funa dair kabaca bir giri\u015f yapm\u0131\u015f ve terminolojisinden bahsetmi\u015ftik. Bu makale kapsam\u0131nda\u00a0ise\u00a0a\u015fa\u011f\u0131daki konulara de\u011finece\u011fiz:<\/p>\n<ol>\n<li>Zookeeper nedir<\/li>\n<li>Docker \u00fczerine zookeeper kurulumu<\/li>\n<li>Docker \u00fczerine kafka kurulumu<\/li>\n<li>C# client&#8217;\u0131 ile kafka \u00fczerinde \u00f6rnek<\/li>\n<\/ol>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/docker-logo.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-940 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/docker-logo.png\" alt=\"docker-logo\" width=\"682\" height=\"163\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-logo.png 682w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-logo-300x72.png 300w\" data-sizes=\"(max-width: 682px) 100vw, 682px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 682px; --smush-placeholder-aspect-ratio: 682\/163;\" \/><\/a><\/p>\n<p>Kurulum i\u015flemine ba\u015flamak i\u00e7in\u00a0Docker Quickstart Terminal\u2019i a\u00e7al\u0131m ve a\u015fa\u011f\u0131daki komut sat\u0131r\u0131n\u0131 \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">docker search kafka<\/pre>\n<p>Komutunu \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131ndan sonra Docker Hub \u00fczerinde bir den \u00e7ok Kafka image&#8217;i oldu\u011funu g\u00f6rebilirsiniz. Ben a\u015fa\u011f\u0131daki image&#8217;lerden &#8220;<em>ches\/kafka<\/em>&#8221; olan\u0131n\u0131 kullanaca\u011f\u0131m.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/kafka-search.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-945 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/kafka-search.jpg\" alt=\"kafka-search\" width=\"979\" height=\"512\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/kafka-search.jpg 979w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/kafka-search-300x157.jpg 300w\" data-sizes=\"(max-width: 979px) 100vw, 979px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 979px; --smush-placeholder-aspect-ratio: 979\/512;\" \/><\/a><\/p>\n<p>Bu image&#8217;in detaylar\u0131na ise <a href=\"https:\/\/hub.docker.com\/r\/ches\/kafka\/\" target=\"_blank\">buradan<\/a>\u00a0ula\u015fabilirsiniz. Kendisi zookeeper ba\u011f\u0131ms\u0131z bir service olarak \u00e7al\u0131\u015fmaktad\u0131r ve configuration&#8217;lar\u0131 parameterized bir hale getirilmi\u015ftir.<\/p>\n<p>Dilerseniz biraz zookeeper&#8217;dan bahsedelim.<\/p>\n<h4>1) Zookeeper Nedir?<\/h4>\n<blockquote><p>Zookeeper ne yapar? K\u0131saca zookeeper, <strong>distributed<\/strong> uygulamalar geli\u015ftirmeye izin veren, distributed bir <strong>koordinasyon<\/strong> servisidir diyebiliriz. Bir ba\u015fka de\u011fi\u015fle, multiple instance&#8217;l\u0131 distributed sistemleri configure etmeye yarayan open-source bir projedir diyebiliriz. Bu proje hadoop alt\u0131nda geli\u015ftirilmeye ba\u015flay\u0131p, sonras\u0131nda ise \u00fcst seviye bir Apache projesi haline gelmi\u015ftir.<\/p><\/blockquote>\n<p>Zookeeper&#8217;\u0131n ne oldu\u011fundan biraz bahsetti\u011fimize g\u00f6re dilerseniz bunun Kafka ile ne alakas\u0131 var k\u0131sm\u0131na bir bakal\u0131m.<\/p>\n<p>Kafka&#8217;ya giri\u015f makalesinde de bahsetti\u011fimiz gibi kafka, tamamen <strong>distributed<\/strong> bir sistem \u00fczerinde ve \u00e7al\u0131\u015fmaktad\u0131r. Kafka ise burada zookeeper&#8217;\u0131 \u00e7e\u015fitli configuration bilgilerini store etmek i\u00e7in kullanmaktad\u0131r. Evet, bu c\u00fcmleden, kafka&#8217;n\u0131n zookeeper ile beraber \u00e7al\u0131\u015fmas\u0131n\u0131n <strong>zorunlu<\/strong> oldu\u011funu \u00e7\u0131kartabiliriz. Kafka Getting Started documentation&#8217;a bakt\u0131\u011f\u0131n\u0131zda ise zaten \u015fu c\u00fcmleye denk geleceksiniz:<\/p>\n<blockquote><p>Step 2: Start the server<\/p>\n<p>Kafka uses zookeeper so you need to <strong>first start a zookeeper server<\/strong> if you don&#8217;t already have one. You can use the convenience script packaged with kafka to get a quick-and-dirty single-node zookeeper instance.<\/p><\/blockquote>\n<p>Kafka broker&#8217;lar\u0131 membership &amp; failure detection, leader se\u00e7imi gibi konularda zookeeper&#8217;\u0131 kullanmaktad\u0131r. Kafka&#8217;n\u0131n zookeeper ile ne t\u00fcr bilgiler tuttu\u011funu merak ediyor iseniz,\u00a0<a href=\"https:\/\/www.quora.com\/What-is-the-actual-role-of-ZooKeeper-in-Kafka\" target=\"_blank\">buraya<\/a> bakabilirsiniz.<\/p>\n<h4>2) Docker \u00dczerine Zookeeper Kurulumu<\/h4>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/zookeeper-logo.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-938 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/zookeeper-logo.png\" alt=\"zookeeper-logo\" width=\"843\" height=\"185\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/zookeeper-logo.png 843w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/zookeeper-logo-300x66.png 300w\" data-sizes=\"(max-width: 843px) 100vw, 843px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 843px; --smush-placeholder-aspect-ratio: 843\/185;\" \/><\/a><\/p>\n<p>Zookeeper&#8217;s\u0131z bir kafka kullanamayaca\u011f\u0131m\u0131zdan bahsetti\u011fimize g\u00f6re, docker \u00fczerinden \u00f6ncelikle a\u015fa\u011f\u0131daki komut ile &#8220;jplock\/zookeeper&#8221; image&#8217;ini download edelim ve container&#8217;\u0131 aya\u011fa kald\u0131ral\u0131m.<\/p>\n<pre class=\"lang:default decode:true\">docker run -d --name zookeeper --publish 2181:2181 jplock\/zookeeper:latest<\/pre>\n<p>&#8220;-d&#8221; komutu ile container&#8217;\u0131n arkaplanda\u00a0\u00e7al\u0131\u015fmas\u0131 gerekti\u011fini, isminin zookeeper olaca\u011f\u0131n\u0131 ve &#8220;&#8211;publish&#8221; komutu ile de container&#8217;\u0131n &#8220;2181&#8221; port&#8217;unu\u00a0host&#8217;a publish ediyoruz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/docker-zookeeper-install.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-934 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/docker-zookeeper-install.jpg\" alt=\"docker-zookeeper-install\" width=\"979\" height=\"512\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-zookeeper-install.jpg 979w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-zookeeper-install-300x157.jpg 300w\" data-sizes=\"(max-width: 979px) 100vw, 979px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 979px; --smush-placeholder-aspect-ratio: 979\/512;\" \/><\/a><\/p>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda &#8220;jplock\/zookeeper&#8221; image&#8217;ini bulamad\u0131\u011f\u0131ndan, latest versiyonu i\u00e7in docker hub \u00fczerinden pull i\u015flemini ger\u00e7ekle\u015ftirdi ve vermi\u015f oldu\u011fumuz configuration bilgileri ile container&#8217;\u0131 olu\u015fturdu. A\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rarak aktif olan container&#8217;a bir bakal\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">docker ps<\/pre>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/docker-zookeeper-install.jpg\"><br \/>\n<\/a> <a href=\"\/wp-content\/uploads\/2016\/10\/docker-ps-zookeeper.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-935 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/docker-ps-zookeeper.jpg\" alt=\"docker-ps-zookeeper\" width=\"979\" height=\"512\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-ps-zookeeper.jpg 979w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-ps-zookeeper-300x157.jpg 300w\" data-sizes=\"(max-width: 979px) 100vw, 979px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 979px; --smush-placeholder-aspect-ratio: 979\/512;\" \/><\/a><\/p>\n<p>&#8220;f92916096ad7&#8221; id si ile &#8220;zookeeper&#8221; isminde container haz\u0131r durumdad\u0131r. \u015eimdi kafka kurulumuna ge\u00e7ebiliriz.<\/p>\n<h4>3) Docker \u00dczerine Kafka Kurulumu<\/h4>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/Apache_kafka.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-911 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/Apache_kafka.png\" alt=\"apache_kafka\" width=\"534\" height=\"130\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/Apache_kafka.png 534w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/Apache_kafka-300x73.png 300w\" data-sizes=\"(max-width: 534px) 100vw, 534px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 534px; --smush-placeholder-aspect-ratio: 534\/130;\" \/><\/a><\/p>\n<p>Makale giri\u015finde &#8220;<em>ches\/kafka<\/em>&#8221; image&#8217;ini kullanaca\u011f\u0131m\u0131zdan bahsetmi\u015ftik. Kurulum s\u0131ras\u0131nda zookeeper&#8217;da oldu\u011fu gibi ilgili port&#8217;u bind edip, kafka container&#8217;\u0131n\u0131 zookeeper&#8217;a link&#8217;leyece\u011fiz. Link&#8217;leme i\u015flemi sayesinde iki container birbirleri ile konu\u015fabilir hale geleceklerdir.<\/p>\n<p>Kurulum i\u015flemi i\u00e7in a\u015fa\u011f\u0131daki komut sat\u0131r\u0131n\u0131 terminal \u00fczerinden \u00e7al\u0131\u015ft\u0131ral\u0131m.<\/p>\n<pre class=\"lang:default decode:true\">docker run --name kafka -d -p \"9092:9092\" -e KAFKA_ADVERTISED_HOST_NAME=192.168.99.100 --link zookeeper:zookeeper ches\/kafka<\/pre>\n<p>Burada container&#8217;a kafka ismini verip, &#8220;-p&#8221; komutu ile kafka&#8217;n\u0131n default portu olan &#8220;9092&#8221; yi host&#8217;a bind ediyoruz. Ard\u0131ndan &#8220;-e&#8221; komutu ile\u00a0bir &#8220;KAFKA_ADVERTISED_HOST_NAME&#8221;\u00a0environment&#8217;\u0131 set ediyoruz. Bu de\u011feri docker&#8217;\u0131n ip&#8217;si olan &#8220;192.168.99.100&#8221; olarak belirliyoruz. Ip adresi olarak localhost yerine bunu belirtmemizin sebebi ise, kafka&#8217;y\u0131 multiple brokers \u00e7al\u0131\u015ft\u0131rabilmektir. Linkleme i\u015flemini ise &#8220;&#8211;link&#8221; key&#8217;i ile ger\u00e7ekle\u015ftiriyoruz.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/docker-kafka-install.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-942 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/docker-kafka-install.jpg\" alt=\"docker-kafka-install\" width=\"979\" height=\"512\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-kafka-install.jpg 979w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-kafka-install-300x157.jpg 300w\" data-sizes=\"(max-width: 979px) 100vw, 979px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 979px; --smush-placeholder-aspect-ratio: 979\/512;\" \/><\/a><\/p>\n<p>&#8220;ches\/kafka&#8221; image&#8217;i daha \u00f6nce sistemde olmad\u0131\u011f\u0131 i\u00e7in yine docker hub \u00fczerinden pull i\u015flemleri ger\u00e7ekle\u015ferek, vermi\u015f oldu\u011fumuz configuration ayarlar\u0131 ile birlikte container haz\u0131r bir hale gelmi\u015ftir. Tekrardan a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131ral\u0131m ve container&#8217;lar\u0131n son halini bir g\u00f6relim.<\/p>\n<pre class=\"lang:default decode:true \">docker ps<\/pre>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/docker-ps.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-943 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/docker-ps.jpg\" alt=\"docker-ps\" width=\"979\" height=\"512\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-ps.jpg 979w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/docker-ps-300x157.jpg 300w\" data-sizes=\"(max-width: 979px) 100vw, 979px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 979px; --smush-placeholder-aspect-ratio: 979\/512;\" \/><\/a><\/p>\n<p>Yukar\u0131daki resimde g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi &#8220;kafka&#8221; ve &#8220;zookeeper&#8221; isminde iki adet container aktif durumdad\u0131r. Docker \u00fczerindeki kurulum i\u015flemlerimizi tamamlad\u0131k ve art\u0131k kafka client&#8217;\u0131n\u0131 kullanarak, &#8220;192.168.99.100&#8221; numaral\u0131 ip si ve bind etmi\u015f oldu\u011fumuz &#8220;9092&#8221; portu \u00fczerinden kafka&#8217;ya ba\u011flanabilmeye haz\u0131r durumday\u0131z.<\/p>\n<h4>4) C# ile Kafka Client Kullan\u0131m\u0131<\/h4>\n<p>Ger\u00e7ekle\u015ftirecek oldu\u011fumuz \u00f6rnekte Apache Kafka protocol&#8217;unu implemente eden,\u00a0<strong>kafka-net<\/strong> isimli k\u00fct\u00fcphaneyi kullanaca\u011f\u0131z. Bu k\u00fct\u00fcphane github \u00fczerinde <em>Jroland<\/em>\u00a0isimli bir kullan\u0131c\u0131 taraf\u0131ndan geli\u015ftirilmektedir.<\/p>\n<p>&#8220;KafkaClientExample&#8221; isminde bo\u015f bir solution olu\u015fturup, i\u00e7erisine &#8220;KafkaProducerExample&#8221; isminde bir console application ekliyorum\u00a0ve ard\u0131ndan Nuget Package Manager&#8217;a girerek a\u015fa\u011f\u0131da bulunan\u00a0paketi projeye dahil ediyorum.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/kafka-producer-net.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-952 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/kafka-producer-net.jpg\" alt=\"kafka-producer-net\" width=\"707\" height=\"283\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/kafka-producer-net.jpg 707w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/kafka-producer-net-300x120.jpg 300w\" data-sizes=\"(max-width: 707px) 100vw, 707px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 707px; --smush-placeholder-aspect-ratio: 707\/283;\" \/><\/a><\/p>\n<p>\u0130lgili\u00a0kafka client paketinin kurulumundan sonra ise &#8220;TestProducer&#8221; isminde yeni bir class ekleyelim\u00a0ve isminden de anla\u015f\u0131labilece\u011fi gibi Producer&#8217;\u0131 a\u015fa\u011f\u0131daki gibi kodlamaya ba\u015flayal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true\">using KafkaNet;\r\nusing KafkaNet.Protocol;\r\n\r\nnamespace KafkaProducerExample\r\n{\r\n    public class TestProducer\r\n    {\r\n        private readonly IBrokerRouter _brokerRouter;\r\n\r\n        public TestProducer(IBrokerRouter brokerRouter)\r\n        {\r\n            _brokerRouter = brokerRouter;\r\n        }\r\n\r\n        public void SendMessageAsync(string topic, string message)\r\n        {\r\n            var producer = new Producer(_brokerRouter);\r\n\r\n            producer.SendMessageAsync(topic, new[] { new Message(message), }).Wait();\r\n        }\r\n    }\r\n}<\/pre>\n<p>Constructor arac\u0131l\u0131\u011f\u0131 ile inject etmi\u015f oldu\u011fumuz &#8220;IBrokerRouter&#8221;, message&#8217;lar\u0131n do\u011fru kafka partition k\u0131sm\u0131na\u00a0gidebilmeleri i\u00e7in\u00a0metadata tabanl\u0131\u00a0routing i\u015flemi ger\u00e7ekle\u015ftirmektedir. &#8220;SendMessageAsync&#8221; method&#8217;u ise &#8220;topic&#8221; ve &#8220;message&#8221; parametrelerine sahiptir.\u00a0Kafka&#8217;ya giri\u015f makalesinden hat\u0131rlarsak\u00a0topic&#8217;ler kullan\u0131c\u0131 tan\u0131ml\u0131 category isimleri olup, yay\u0131nlanacak message&#8217;lar burada tutuluyordu. Bu nedenle &#8220;SendMessageAsync&#8221; method&#8217;u\u00a0i\u00e7erisinde, message&#8217;\u0131n hangi topic&#8217;e gidece\u011fini bildirmemiz gerekmektedir.<\/p>\n<p>Method i\u00e7eri\u011fine bakt\u0131\u011f\u0131m\u0131zda &#8220;_brokerRouter&#8221; \u0131 parametre olarak ge\u00e7ip yeni bir Producer instance&#8217;\u0131 olu\u015fturuyoruz. Bu instance \u00fczerinden ise &#8220;SendMessageAsync&#8221; method&#8217;unu \u00e7a\u011f\u0131r\u0131p, hangi topic&#8217;e gidece\u011fini ve ilgili message&#8217;\u0131 set edip, &#8220;Wait&#8221; method&#8217;u ile ilgili task&#8217;\u0131n execution&#8217;\u0131n\u0131n complete olmas\u0131n\u0131 bekliyoruz.<\/p>\n<p>&#8220;Program.cs&#8221; i ise a\u015fa\u011f\u0131daki gibi kodlayal\u0131m.<\/p>\n<pre class=\"lang:default decode:true \">using System;\r\nusing KafkaNet;\r\nusing KafkaNet.Model;\r\n\r\nnamespace KafkaProducerExample\r\n{\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            var kafkaOptions = new KafkaOptions(new Uri(\"http:\/\/192.168.99.100:9092\"));\r\n            var brokerRouter = new BrokerRouter(kafkaOptions);\r\n            var producer = new TestProducer(brokerRouter);\r\n\r\n            Console.WriteLine(\"Send a Message to TestTopic:\");\r\n            while (true)\r\n            {\r\n                producer.SendMessageAsync(\"TestTopic\", Console.ReadLine());\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<p>Bu k\u0131s\u0131m olduk\u00e7a straightforward. &#8220;KafkaOptions&#8221; class&#8217;\u0131na bir kafka server uri&#8217;\u0131 tan\u0131ml\u0131yoruz. Bu uri, kafka kurulumu s\u0131ras\u0131nda docker \u00fczerinden &#8220;9092&#8221; port adresine bind etti\u011fimiz docker ip&#8217;si. Sonras\u0131nda ise olu\u015fturmu\u015f\u00a0oldu\u011fumuz &#8220;KafkaOptions&#8221; instance&#8217;\u0131n\u0131 kullanarak, bir adet &#8220;BrokerRouter&#8221; instance&#8217;\u0131 yarat\u0131yoruz. &#8220;BrokerRouter&#8221; instance&#8217;\u0131n\u0131da kullanarak &#8220;TestProducer&#8221; \u0131 tan\u0131mlay\u0131p, &#8220;SendMessageAsync&#8221; method&#8217;u ile console \u00fczerinden gelen mesajlar\u0131 &#8220;TestTopic&#8221; e g\u00f6nderiyoruz.\u00a0Art\u0131k bir producer&#8217;e sahip oldu\u011fumuza g\u00f6re herhangi bir message g\u00f6nderildi\u011fi taktirde, bir adet topic ve bu topic&#8217;in x partition&#8217;\u0131n\u0131nda ve x offset&#8217;inde bir message&#8217;a sahip olaca\u011f\u0131z.\u00a0Art\u0131k bu topic&#8217;i\u00a0consume etmeye ba\u015flayabiliriz.<\/p>\n<p>Solution \u00fczerine &#8220;KafkaConsumerExample&#8221; isminde yeni bir console application daha ekleyelim ve producer k\u0131sm\u0131nda oldu\u011fu gibi Nuget Package Manager \u00fczerinden &#8220;kafka-net&#8221; k\u00fct\u00fcphanesini buraya da dahil edelim. Paket dahil etme i\u015fleminin hemen ard\u0131ndan &#8220;TestConsumer&#8221; isimli bir class ekleyelim ve a\u015fa\u011f\u0131daki gibi kodlamaya ba\u015flayal\u0131m.<\/p>\n<pre class=\"lang:c# decode:true \">using System;\r\nusing System.Text;\r\nusing KafkaNet;\r\nusing KafkaNet.Model;\r\n\r\nnamespace KafkaConsumerExample\r\n{\r\n    public class TestConsumer\r\n    {\r\n        private readonly IBrokerRouter _brokerRouter;\r\n\r\n        public TestConsumer(IBrokerRouter brokerRouter)\r\n        {\r\n            _brokerRouter = brokerRouter;\r\n        }\r\n\r\n        public void StartConsume(string topic)\r\n        {\r\n            Console.WriteLine($\"Consuming {topic}\");\r\n\r\n            var consumer = new Consumer(new ConsumerOptions(topic, _brokerRouter));\r\n\r\n            foreach (var message in consumer.Consume())\r\n            {\r\n                Console.WriteLine(\"Response: PartitionId:{0}, Offset:{1} Message:{2}\",\r\n                    message.Meta.PartitionId, message.Meta.Offset, Encoding.UTF8.GetString(message.Value));\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<p>Buradaki s\u00fcre\u00e7 de hemen hemen producer ile ayn\u0131. Consumer instance&#8217;\u0131 olu\u015ftururken, constructor \u00fczerinden extra olarak hangi topic&#8217;i consume etmesi gerekti\u011fini s\u00f6yl\u00fcyoruz. \u00a0Olu\u015fan consumer instance&#8217;\u0131 \u00fczerinden ise &#8220;Consume&#8221; method&#8217;unu \u00e7a\u011f\u0131rarak, &#8220;IEnumerable&lt;Message&gt;&#8221; tipinde bitmeyen bir stream elde ediyoruz. Yani s\u00fcrekli consume modunday\u0131z. Consume\u00a0edilen\u00a0message&#8217;\u0131n &#8220;Meta&#8221; property&#8217;si \u00fczerinden, hangi partition&#8217;da oldu\u011funu ve offset bilgisinin ne oldu\u011fu gibi spesifik bilgilerede\u00a0ula\u015fabilmek m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<p>&#8220;Program.cs&#8221; k\u0131sm\u0131na ge\u00e7ti\u011fimizde ise consumer i\u00e7in:<\/p>\n<pre class=\"lang:c# decode:true \">using System;\r\nusing KafkaNet;\r\nusing KafkaNet.Model;\r\n\r\nnamespace KafkaConsumerExample\r\n{\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            var kafkaOptions = new KafkaOptions(new Uri(\"http:\/\/192.168.99.100:9092\"));\r\n            var brokerRouter = new BrokerRouter(kafkaOptions);\r\n            var consumer = new TestConsumer(brokerRouter);\r\n\r\n            consumer.StartConsume(\"TestTopic\");\r\n        }\r\n    }\r\n}<\/pre>\n<p>&#8220;KafkaOptions&#8221; \u00fczerinden yine kafka server uri&#8217;\u0131n\u0131 verdikten sonra &#8220;TestConsumer&#8221; \u0131 initialize ediyoruz ve olu\u015fturmu\u015f oldu\u011fumuz &#8220;StartConsume&#8221; method&#8217;una, &#8220;TestTopic&#8221; ini consume etmek istedi\u011fimizi s\u00f6yl\u00fcyoruz. \u015eimdilik hepsi bu kadar.<\/p>\n<p>Dilerseniz iki console uygulamas\u0131n\u0131 da multiple startup olarak ba\u015flatal\u0131m ve producer \u00fczerinden bir ka\u00e7 mesaj g\u00f6nderelim.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/producer-consumer.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-953 lazyload\" data-src=\"\/wp-content\/uploads\/2016\/10\/producer-consumer.jpg\" alt=\"producer-consumer\" width=\"528\" height=\"299\" data-srcset=\"https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/producer-consumer.jpg 528w, https:\/\/gokhan-gokalp.com\/wp-content\/uploads\/2016\/10\/producer-consumer-300x170.jpg 300w\" data-sizes=\"(max-width: 528px) 100vw, 528px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 528px; --smush-placeholder-aspect-ratio: 528\/299;\" \/><\/a><\/p>\n<p>Yukar\u0131daki resimde g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi &#8220;TestTopic&#8221; i \u00fczerinden g\u00f6ndermi\u015f oldu\u011fumuz ilk message olan &#8220;hello world&#8221; message&#8217;\u0131, 0 numaral\u0131 <strong>partition<\/strong> id&#8217;ye ve 0 numaral\u0131 <strong>offset<\/strong> bilgisine sahiptir. \u0130kinci g\u00f6nderdi\u011fimiz &#8220;it&#8217;s work!&#8221; message&#8217;\u0131 ise, 0 numaral\u0131 partition \u00fczerinde, 1 numaral\u0131 offset&#8217;e sahip olmu\u015ftur. Topic&#8217;e gelen bu iki message, partition i\u00e7erisinde s\u0131ral\u0131 bir \u015fekilde eklenmi\u015ftir.<\/p>\n<p>Bir makalenin daha sonuna geldik arkada\u015flar. Kafka \u00fczerindeki know-how&#8217;\u0131m\u0131 artt\u0131rd\u0131k\u00e7a sizlerle payla\u015fmaya devam edece\u011fim. Neticede apache kafka b\u00fcy\u00fck bir d\u00fcnya, hele ki Kafka, Spark ve\u00a0Avro\u00a0ekosistemi baz al\u0131nd\u0131\u011f\u0131nda.<\/p>\n<p>Umar\u0131m keyifli bir makale olmu\u015ftur. \u00d6rnek projeye ekten ula\u015fabilirsiniz.<\/p>\n<p>Takipte kal\u0131n.<\/p>\n<p><a href=\"\/wp-content\/uploads\/2016\/10\/KafkaClientExample.rar\">kafkaclientexample<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhaba arkada\u015flar. Bir \u00f6nceki Apache Kafka Serisi 01 \u2013 Apache Kafka\u2019ya Giri\u015f\u00a0makalesinde, Apache Kafka&#8217;n\u0131n\u00a0ne oldu\u011funa dair kabaca bir giri\u015f yapm\u0131\u015f ve terminolojisinden bahsetmi\u015ftik. Bu makale kapsam\u0131nda\u00a0ise\u00a0a\u015fa\u011f\u0131daki konulara de\u011finece\u011fiz: Zookeeper nedir Docker \u00fczerine zookeeper kurulumu Docker \u00fczerine kafka kurulumu C# client&#8217;\u0131 ile kafka \u00fczerinde \u00f6rnek Kurulum&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/gokhan-gokalp.com\/tr\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/\">Devam\u0131n\u0131 okuyun<span class=\"screen-reader-text\">Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,285],"tags":[332,317,322,321,331,330,329,324,327,326,323,328,325],"class_list":["post-927","post","type-post","status-publish","format-standard","hentry","category-net","category-messaging","tag-apache-kafka-c","tag-apache-kafka-nedir","tag-docker","tag-kafka","tag-kafka-c","tag-kafka-c-client","tag-kafka-c-kullanimi","tag-kafka-kullanimi","tag-kafka-kurulumu","tag-kafka-ve-zookeeper","tag-zookeeper","tag-zookeeper-kurulumu","tag-zookeeper-nedir","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"tr","enabled_languages":["en","tr"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"tr":{"title":false,"content":false,"excerpt":false}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f - G\u00f6khan G\u00f6kalp<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f - G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/\" \/>\n<meta property=\"og:site_name\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-25T21:28:02+00:00\" \/>\n<meta name=\"author\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"G\u00f6khan G\u00f6kalp\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/\"},\"author\":{\"name\":\"G\u00f6khan G\u00f6kalp\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"headline\":\"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f\",\"datePublished\":\"2016-10-25T21:28:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/\"},\"wordCount\":1421,\"commentCount\":8,\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"keywords\":[\"apache kafka c#\",\"Apache Kafka Nedir\",\"docker\",\"kafka\",\"kafka c#\",\"kafka c# client\",\"kafka c# kullan\u0131m\u0131\",\"kafka kullan\u0131m\u0131\",\"kafka kurulumu\",\"kafka ve zookeeper\",\"zookeeper\",\"zookeeper kurulumu\",\"zookeeper nedir\"],\"articleSection\":[\".NET\",\"Messaging\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/\",\"name\":\"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f - G\u00f6khan G\u00f6kalp\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\"},\"datePublished\":\"2016-10-25T21:28:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#website\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"description\":\"C# &amp; Python lover\",\"publisher\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gokhan-gokalp.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/#\\\/schema\\\/person\\\/7e2a7fa98babd22a5fdae563c4b8cdbe\",\"name\":\"G\u00f6khan G\u00f6kalp\",\"pronouns\":\"he\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"contentUrl\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\",\"caption\":\"G\u00f6khan G\u00f6kalp\"},\"logo\":{\"@id\":\"https:\\\/\\\/gokhan-gokalp.com\\\/wp-content\\\/litespeed\\\/avatar\\\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659\"},\"sameAs\":[\"https:\\\/\\\/gokhan-gokalp.com\"],\"url\":\"https:\\\/\\\/gokhan-gokalp.com\\\/tr\\\/author\\\/gok-gokalp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f - G\u00f6khan G\u00f6kalp","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:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/","og_locale":"tr_TR","og_type":"article","og_title":"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f - G\u00f6khan G\u00f6kalp","og_url":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/","og_site_name":"G\u00f6khan G\u00f6kalp","article_published_time":"2016-10-25T21:28:02+00:00","author":"G\u00f6khan G\u00f6kalp","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"G\u00f6khan G\u00f6kalp","Tahmini okuma s\u00fcresi":"8 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/#article","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/"},"author":{"name":"G\u00f6khan G\u00f6kalp","@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"headline":"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f","datePublished":"2016-10-25T21:28:02+00:00","mainEntityOfPage":{"@id":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/"},"wordCount":1421,"commentCount":8,"publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"keywords":["apache kafka c#","Apache Kafka Nedir","docker","kafka","kafka c#","kafka c# client","kafka c# kullan\u0131m\u0131","kafka kullan\u0131m\u0131","kafka kurulumu","kafka ve zookeeper","zookeeper","zookeeper kurulumu","zookeeper nedir"],"articleSection":[".NET","Messaging"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/","url":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/","name":"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f - G\u00f6khan G\u00f6kalp","isPartOf":{"@id":"https:\/\/gokhan-gokalp.com\/#website"},"datePublished":"2016-10-25T21:28:02+00:00","breadcrumb":{"@id":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gokhan-gokalp.com\/apache-kafka-serisi-02-docker-uzerine-kurulumu-ve-c-sharp-ile-giris\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gokhan-gokalp.com\/"},{"@type":"ListItem","position":2,"name":"Apache Kafka Serisi 02 \u2013 Docker \u00dczerine Kurulumu ve C# ile Giri\u015f"}]},{"@type":"WebSite","@id":"https:\/\/gokhan-gokalp.com\/#website","url":"https:\/\/gokhan-gokalp.com\/","name":"G\u00f6khan G\u00f6kalp","description":"C# &amp; Python lover","publisher":{"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gokhan-gokalp.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/gokhan-gokalp.com\/#\/schema\/person\/7e2a7fa98babd22a5fdae563c4b8cdbe","name":"G\u00f6khan G\u00f6kalp","pronouns":"he","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","url":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","contentUrl":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659","caption":"G\u00f6khan G\u00f6kalp"},"logo":{"@id":"https:\/\/gokhan-gokalp.com\/wp-content\/litespeed\/avatar\/e645f66b6264ced10d7b6d8b1f85509b.jpg?ver=1776170659"},"sameAs":["https:\/\/gokhan-gokalp.com"],"url":"https:\/\/gokhan-gokalp.com\/tr\/author\/gok-gokalp\/"}]}},"_links":{"self":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/comments?post=927"}],"version-history":[{"count":15,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/927\/revisions"}],"predecessor-version":[{"id":955,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/posts\/927\/revisions\/955"}],"wp:attachment":[{"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/media?parent=927"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/categories?post=927"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gokhan-gokalp.com\/tr\/wp-json\/wp\/v2\/tags?post=927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}