{"id":19,"date":"2026-09-23T20:45:35","date_gmt":"2026-09-23T20:45:35","guid":{"rendered":"https:\/\/www.akifsen.com.tr\/blog\/?p=19"},"modified":"2026-09-23T20:45:35","modified_gmt":"2026-09-23T20:45:35","slug":"kafka-rabbitmq-queue-event-log","status":"publish","type":"post","link":"https:\/\/www.akifsen.com.tr\/blog\/2026\/09\/23\/kafka-rabbitmq-queue-event-log\/","title":{"rendered":"Queue ile Event Log Ayn\u0131 \u015eey De\u011fildir: Kafka ve RabbitMQ&#8217;yu Nerede Kullanmal\u0131?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Kafka m\u0131 RabbitMQ mu?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu soru genellikle throughput tablolar\u0131yla cevaplanmaya \u00e7al\u0131\u015f\u0131l\u0131yor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bence \u00f6nce farkl\u0131 bir soru sormak gerekiyor:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>G\u00f6nderdi\u011fimiz \u015fey bir i\u015f mi, yoksa ge\u00e7mi\u015fte ger\u00e7ekle\u015fmi\u015f bir olay m\u0131?<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0130\u015f yap\u0131lacaksa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bir PDF \u00fcretilecek olsun.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GenerateMonthlyReport<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bir worker mesaj\u0131 alacak, raporu olu\u015fturacak ve i\u015f tamamlanacak.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ba\u015far\u0131s\u0131zsa retry yap\u0131lacak.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Belirli say\u0131da denemeden sonra dead-letter ak\u0131\u015f\u0131na al\u0131nabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu model do\u011fal olarak queue modeline yak\u0131nd\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RabbitMQ&#8217;nun work queue, routing, acknowledgement ve publisher confirm mekanizmalar\u0131 bu t\u00fcr senaryolara do\u011frudan kar\u015f\u0131l\u0131k verir. RabbitMQ dok\u00fcmantasyonu acknowledgements ve publisher confirms mekanizmalar\u0131n\u0131n g\u00fcvenilir teslimat a\u00e7\u0131s\u0131ndan temel rol\u00fcn\u00fc \u00f6zellikle vurguluyor.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Olay kayd\u0131 tutulacaksa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u015eimdi ba\u015fka bir mesaj d\u00fc\u015f\u00fcnelim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PaymentCompleted<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bu event&#8217;i bug\u00fcn notification sistemi t\u00fcketiyor olabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yar\u0131n fraud analytics eklenebilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bir ay sonra reporting servisi ge\u00e7mi\u015f event&#8217;leri yeniden okumak isteyebilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Burada event i\u015flendikten sonra de\u011fersiz hale gelmez.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ge\u00e7mi\u015fin par\u00e7as\u0131d\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kafka&#8217;n\u0131n modeli tam olarak buna uygundur. Event&#8217;ler topic partition&#8217;lar\u0131nda retention s\u00fcresi boyunca kal\u0131r ve farkl\u0131 consumer gruplar\u0131 ayn\u0131 event ak\u0131\u015f\u0131n\u0131 ba\u011f\u0131ms\u0131z olarak okuyabilir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ayn\u0131 sistemde ikisi birden olabilir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Burada s\u0131k yap\u0131lan hata teknoloji se\u00e7imini organizasyon standard\u0131na \u00e7evirmektir.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Biz Kafka kullan\u0131yoruz, her \u015feyi Kafka&#8217;ya atal\u0131m.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">veya:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">RabbitMQ zaten var, event&#8217;leri de oradan ge\u00e7irelim.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Oysa bir sistemde hem command\/job hem domain event olabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6rne\u011fin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PaymentCompleted \u2192 Kafka\n\nGenerateInvoicePdf \u2192 RabbitMQ\nSendEmail         \u2192 RabbitMQ<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">gayet mant\u0131kl\u0131 bir mimari olabilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tek broker kullanmak operasyonu sadele\u015ftirebilir; fakat b\u00fct\u00fcn mesajlar\u0131n ayn\u0131 semanti\u011fe sahip oldu\u011funu varsaymak ba\u015fka bir problemdir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exactly-once beklentisi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Messaging tasar\u0131m\u0131nda tehlikeli beklentilerden biri de \u201cmesaj yaln\u0131zca bir kez gelir\u201d varsay\u0131m\u0131d\u0131r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Network failure, acknowledgement kayb\u0131 veya consumer restart gibi durumlar duplicate processing \u00fcretebilir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RabbitMQ dok\u00fcmantasyonu da acknowledgement kullan\u0131lan modellerde yeniden teslimat ya\u015fanabilece\u011fini ve consumer taraf\u0131n\u0131n duplicate handling\/idempotency d\u00fc\u015f\u00fcnmesi gerekti\u011fini a\u00e7\u0131kl\u0131yor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bu nedenle consumer&#8217;\u0131n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>event_id = evt_92831<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">gibi benzersiz bir identifier \u00fczerinden daha \u00f6nce i\u015flenmi\u015f event&#8217;leri tan\u0131yabilmesi \u00f6nemlidir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Message broker se\u00e7imi \u00fcr\u00fcn katalo\u011fundan teknoloji se\u00e7mek de\u011fildir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6nce mesaj\u0131n semanti\u011fini tan\u0131mlay\u0131n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sonra broker&#8217;\u0131 se\u00e7in.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tersi yap\u0131l\u0131rsa mimariyi teknoloji belirlemeye ba\u015flar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kafka m\u0131 RabbitMQ mu? Bu soru genellikle throughput tablolar\u0131yla cevaplanmaya \u00e7al\u0131\u015f\u0131l\u0131yor. Bence \u00f6nce farkl\u0131 bir soru sormak gerekiyor: G\u00f6nderdi\u011fimiz \u015fey bir i\u015f mi, yoksa ge\u00e7mi\u015fte ger\u00e7ekle\u015fmi\u015f bir olay m\u0131? \u0130\u015f yap\u0131lacaksa Bir PDF \u00fcretilecek olsun. Bir worker mesaj\u0131 alacak, raporu olu\u015fturacak ve i\u015f tamamlanacak. Ba\u015far\u0131s\u0131zsa retry yap\u0131lacak. Belirli say\u0131da denemeden sonra dead-letter ak\u0131\u015f\u0131na al\u0131nabilir. Bu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-19","post","type-post","status-publish","format-standard","hentry","category-mimari"],"_links":{"self":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/19","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/comments?post=19"}],"version-history":[{"count":1,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/19\/revisions"}],"predecessor-version":[{"id":20,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/posts\/19\/revisions\/20"}],"wp:attachment":[{"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/media?parent=19"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/categories?post=19"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.akifsen.com.tr\/blog\/wp-json\/wp\/v2\/tags?post=19"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}