Kafka Docker Açıklandı: Kurulum, En İyi Uygulamalar ve İpuçları
Apache Kafka’yı Docker ve Compose ile nasıl kuracağınızı öğrenin. En iyi uygulamaları, yaygın tuzakları ve geliştirme ile test ortamları için ipuçlarını keşfedin
Modern veri hatları ve mikro hizmetler dünyasında Apache Kafka, gerçek zamanlı olay akışlarını yönetmek ve dağıtık sistemleri entegre etmek için başvurulan bir çözüm olarak öne çıkıyor. Daha fazla mühendislik ekibi ölçeklenebilir, olaya dayalı mimarilere yöneldikçe Kafka güvenilir veri hareketinin merkezine yerleşiyor.
Bu eğilime paralel olarak Docker, geliştiricilerin karmaşık hizmetleri tutarsız ortamlar veya yerel sorunlar hakkında endişelenmeden yönetmesi, paylaşması ve dağıtması için önde gelen yol haline geldi.
Kafka’yı Docker ile çalıştırarak ekipler test, kavram kanıtlama demoları veya hatta üretim iş yükleri için üretime benzer kümeleri hızla ayağa kaldırabilir.
Bu makale, Kafka ile çalışmayı sade ve tekrarlanabilir hale getirmek isteyen orta seviye backend geliştiricileri, DevOps mühendisleri ve veri platformlarını yöneten herkese yöneliktir.
Apache Kafka, yüksek aktarım kapasiteli, hataya dayanıklı ve ölçeklenebilir mesajlaşma için tasarlanmış dağıtık bir akış platformudur.
Veri üreticileri ile tüketicileri arasında kalıcı ve yüksek hızlı bir hat görevi görür. Mikro hizmetleri bağlamanız, veri akışlarını orkestre etmeniz veya gerçek zamanlı analitik işlemeniz gerektiğinde Kafka genellikle tercih edilen araçtır.
Kafka Streams Eğitimi ile Kafka Streams kullanarak gerçek zamanlı veri işleme uygulamalarını nasıl oluşturacağınızı öğrenebilirsiniz. Eğitim, temel kavramları, Java & Python uygulamalarını ve ölçeklenebilir akış uygulamaları geliştirmek için adım adım örnekleri kapsar.
Kafka’yı çalıştırmak karmaşık olabilir. Deneyimli mühendisler bile broker’lar, konular (topic), bölümler (partition) ve Zookeeper veya KRaft gibi gerekli bileşenlerin karmaşıklığını yorucu bulabilir.
Docker, ikili dosyaları, bağımlılıkları ve yapılandırmaları konteynerlara paketleyerek süreci basitleştirir.
Docker ile mühendisler herhangi bir makinede Kafka kümesini başlatabilir, meslektaşlarıyla aynı kurulumları paylaşabilir ve yaygın “benim makinemde çalışıyor” baş ağrısından kaçınabilir. Dockerize Kafka özellikle şu alanlarda popülerdir:
Hızlı açma-kapama döngülerinin çok değerli olduğu yerel geliştirme ve test
CI/CD boru hatlarında izole entegrasyon ortamları
Tek bir host üzerinde çoklu broker kümelerini taklit etmek
Eğitim ve gösterim kurulumları
Apache Kafka for Beginners rehberimizle Apache Kafka’yı keşfedin. Temelleri öğrenin, başlayın ve bu güçlü olay akışı platformunun gelişmiş özellikleri ile gerçek dünya kullanım alanlarını ortaya çıkarın.
Docker’da Kafka’nın Temelleri
Orkestrasyona dalmadan önce, hem Kafka’nın teknik parçalarını hem de Docker’ın dizüstü bilgisayar veya sunucu üzerinde dağıtık doğasını nasıl yeniden yarattığını parçalarına ayırmak faydalı olacaktır.
Learn Docker from Scratch eğitimimizde de öğreneceğiniz üzere Docker, Kafka gibi uygulamaların konteynerizasyon yoluyla dağıtımını, ölçeklenmesini ve yönetimini basitleştiren popüler bir araçtır.
Kafka mimarisinin temelleri
Kafka’nın belkemiği, mesajları depolayan, alan ve sunan sunucu süreci olan broker’dır. Her küme birden fazla broker’dan oluşabilir; veri ve yük dağıtılır.
Her broker’ın içinde konular (mesajları düzenlemek için adlandırılmış kanallar) ve bölümler (paralellik ve dayanıklılık için olayları birçok sunucuya yayan alt kanallar) bulunur. Üreticiler (producer) veriyi konulara yazar, tüketiciler (consumer) ise bu mesajlara abone olur ve işler.
Eşgüdüm kritik önemdedir. Geleneksel olarak Kafka, broker metadatasını, bölüm liderliğini ve genel küme sağlığını yönetmek için Zookeeper’a dayanır. Daha yeni dağıtımlarda ise bu eşgüdümü Kafka’nın içine alan ve Zookeeper bağımlılığını kaldıran KRaft modu kullanılabilir. ZooKeeper 3.5 sürümünde kullanımdan kaldırıldı ve 4.0’da kaldırılması planlanıyor.
Kafka, 2.8 sürümünden itibaren KRaft modunu tanıttı; bu sayede küme eşgüdümünü Zookeeper’a ihtiyaç duymadan dahili olarak yönetebiliyor ve 3.3 sürümünde üretim için hazır ilan edildi. Bu değişim, dağıtımları basitleştirir ve yönetilmesi gereken bileşen sayısını azaltır.
Docker Compose kullanarak KRaft modunda Kafka kurmak için:
Bu yapılandırma, KRaft modunda tek düğümlü bir Kafka kümesi kurar ve Zookeeper ihtiyacını ortadan kaldırır.
Docker’ın olmazsa olmazları
Kafka’yı Docker ile çalıştırmak için yalnızca birkaç temel bileşene ihtiyacınız var: Docker Engine (çalışma zamanı) ve çoğunlukla çoklu konteyner yönetimi için Docker Compose.
Compose dosyaları, birden fazla servisi (Kafka, Zookeeper, Kafka UI vb.), bunların ağlarını, ortam değişkenlerini ve depolama bağlarını belirtmenizi sağlar. Docker’ın ağ yapısı, her broker’a kendi konteynerını, host adını ve portlarını vererek tek bir makinede bile çoklu broker kümelerini taklit etmeyi mümkün kılar.
Docker’ı öğrenmenin en iyi yollarından biri projelerle pratik yapmaktır. Şu 10 Docker Proje Fikri ile pratik yapın.
Docker Compose ile Kafka Kurulumu
Docker Compose, birbiriyle etkileşen birden çok konteyner gerektiren uygulamaları çalıştırmanın sıklıkla tercih edilen yoludur. Kabuk betikleri veya manuel komutlarla uğraşmak yerine Compose, tüm servisleri ve bağlantılarını tek bir YAML dosyasında tanımlamanıza olanak tanır.
Bu yaklaşım yapılandırma sapmasını azaltır, işe alıştırmayı hızlandırır ve herkesin geliştirme için aynı yığını kullanmasını garanti eder.
Minimal Compose kurulumu
Yerel geliştirme için Kafka ve Zookeeper’ı başlatan basit bir docker-compose.yml şöyle:
Bu minimal kurulum, ilgili portları eşler, Kafka’yı Zookeeper’a bağlar ve konteynerlar yeniden başlarsa mesajların kaybolmaması için bir Docker birimini bağlar. Broker kimliği, dinleyici adresleri ve servisler arası bağlantı uç noktalarını yapılandırmak için ortam değişkenlerini kullandığınızdan emin olun.
Kafka’yı iyi anlamak, veri mühendisliği mülakatlarında başarı için kritiktir. Bir sonraki veri mühendisliği mülakatınıza, bu 20 Kafka Mülakat Sorusu ile hazırlanın.
Genişletilmiş yapılandırma
Profesyonel kurulumlar genellikle mesajları yönetmeyi ve incelemeyi kolaylaştırmak için Kafka UI, Schema Registry veya REST Proxy gibi araçlar ekler. Bunlar compose dosyanızdaki services bloğuna eklenebilir. Örneğin:
Kafka konularını ve günlüklerini yeniden başlatmalar arasında kalıcı kılmak, kurtarma senaryolarını veya uzun süre çalışan işlerini test etmek için gereklidir. Her broker için /var/lib/kafka/data ve eğer kullanılıyorsa Zookeeper için /var/lib/zookeeper konumlarına Docker birimleri bağlamayı unutmayın.
kafka-console-producer.sh ve kafka-console-consumer.sh araçlarını da aynı şekilde kullanabilirsiniz. Bu, yerel ortamınızı kirletmeden entegrasyon testi veya denemeler için hızlı bir geri bildirim döngüsü sağlar.
Uygulamalardan programatik erişim
Uygulamalar ve betikler, containerize Kafka’nıza host’un duyurduğu bootstrap sunucuları üzerinden bağlanabilir. Yerel uygulamalar için bootstrap.servers=localhost:9092 veya eşdeğerini ayarlayın.
Yaygın istemciler arasında Python, Java, NodeJS ve Go için resmi Kafka kütüphaneleri bulunur. Uygulamanızın ağ katmanının doğru port ve adreslere ulaşabildiğinden emin olun.
Docker Ağ Yapısı ve Kafka Bağlanabilirliği
Kafka’nın ağ yapılandırması sıklıkla zorluk çıkarır. Dahili ve harici dinleyicileri ve servislerin nasıl dışa açılacağını anlamak hayati önem taşır.
Dahili ve harici dinleyiciler
Kafka broker’ları, istemci bağlantılarını kontrol etmek için dinleyiciler kullanır. İki yaygın kurulum şunlardır:
PLAINTEXT://:9092 yerel, güvenli olmayan trafik için; özellikle geliştirmede
Şifreli veya kimliği doğrulanmış bağlantılar için SSL veya SASL_SSL dinleyiciler
docker-compose içinde doğru portları dışa açın ve KAFKA_ADVERTISED_LISTENER’ların uygulamalarınızın kullandığı gerçek host ve porta uyduğundan emin olun. Bir VM’de veya bulutta çalışıyorsanız bu yapılandırmayı genel IP ve eşlenen porta ayarlayın.
Boyut
Dahili Dinleyici
Harici Dinleyici
Yaygın Protokol
PLAINTEXT://:9092
SSL://, SASL_SSL:// veya eşlenen PLAINTEXT://
Güvenlik
Şifrelenmemiş, kimlik doğrulaması yok
Şifreli ve/veya kimliği doğrulanmış
Tipik Kullanım
Yerel geliştirme, konteynerlar arası trafik
Uzak istemciler, bulut VM’leri, üretim erişimi
Docker Compose Kurulumu
9092 portunu ağ içinde açın
9092’yi host’a eşleyin, KAFKA_ADVERTISED_LISTENERS’ı genel IP’ye ayarlayın
Yapılandırma Odağı
Basitlik ve hız
Güvenilirlik, güvenlik, genel erişim
Ağ Kapsamı
Localhost veya dahili Docker ağı
Genel IP veya dışa dönük alan adı
Çeşitli istemci erişimleri için birden fazla dinleyici yapılandırma
Docker ortamlarında farklı istemci erişim senaryolarını yönetmek için birden fazla dinleyici kurmak yaygındır:
Bu kurulum, dahili Docker istemcilerinin INTERNAL dinleyicisi üzerinden, harici istemcilerin ise EXTERNAL dinleyicisi üzerinden bağlanmasına olanak tanır.
Bağlantı sorunlarını giderme
Yaygın hatalar arasında ‘broker not available’, ‘connection refused’ veya istemci zaman aşımları bulunur. Şunları doğrulayın:
Portlar doğru şekilde açılmış ve eşlenmiş mi
Broker’ın duyurulan dinleyicileri, istemcinizin hedef adresiyle eşleşiyor mu
Tüm konteynerlar docker-compose ps ile sağlıklı mı
Konteynerlar arasında DNS çözümlemesi çalışıyor mu (servis adını kullanın, örn. kafka:9092)
Konteynerlar arası bağlantıları hata ayıklamak için docker network inspect deneyin
Üretime Benzer Ortamlarda Kafka Docker
Yerel testlerin ötesinde, Dockerize Kafka ortamları aşamalı ortamlar ve CI/CD için de yardımcıdır.
Konteyner orkestrasyon stratejileri
Docker Swarm ve Kubernetes gibi orkestratörler, çoklu broker Kafka kurulumlarını, yuvarlanan güncellemeleri ve servis keşfini yönetebilir. Her broker kendi konteynerını alır ve kalıcı depolama eklenir.
Kubernetes’te StatefulSet’ler sıralı dağıtımı yönetir ve her broker için sabit DNS adları oluşturur.
Günlükleme ve izleme
Kafka günlüklerini analiz için Docker log sürücüsüne veya harici depolamaya yönlendirin. Birçok ekip, sorun gidermek için günlükleri Elasticsearch, Loki veya Splunk’a aktarır. Küme izlemesi için Dockerize Kafka’yı Prometheus ve Grafana ile eşleştirin.
Docker’da Kafka için Optimizasyon İpuçları
Kafka’nın performansı dikkatli kaynak ve depolama yönetimine bağlıdır.
Kaynak tahsisi
Her broker konteynerına üretime mümkün olduğunca yakın CPU, RAM ve disk verin. Docker kaynak sınırlarını ayarlayın ve yığın belleği ile çöp toplayıcı ayarları için KAFKA_JVM_PERFORMANCE_OPTS ile JVM seçenekleri geçin.
Kalıcı depolama
/var/lib/kafka/data ve /var/lib/zookeeper için her zaman Docker birimleri veya bind mount’lar kullanın; veriyi konteyner içinde tutmak yeniden başlatmalarda kayba yol açar ve dayanıklılık testlerini boşa çıkarır. Yüksek disk aktarım hızı, özellikle CI/CD yük testlerinde sürdürülebilir performans için kritiktir.
En İyi Uygulamalar ve Yaygın Tuzaklar
İstikrar, sürdürülebilirlik ve ekip verimliliği birkaç en iyi uygulamadan fayda görür.
Yapılandırma yönetimi
Gizleri ve yapılandırmaları haricen .env dosyalarıyla veya bağlanan yapılandırma dizinleriyle yönetin. Hassas verileri asla compose YAML’ınıza sabitlemeyin. Yeniden kullanılan kurulumlar için şablonlama araçlarını veya yapılandırma yönetimi çerçevelerini düşünün.
Yaygın hatalar
Yaygın hatalardan kaçınma
Veriyi konteyner içinde saklamayın; her zaman birimleri bağlayın
Host’unuzda port çakışmalarını kontrol edin
Varsayılan yönetici parolalarını kullanmaktan kaçının; yerel geliştirme için bile açılan portları güvene alın
Docker imajlarını güncel tutun; CVE’ler ve kullanım dışı bağımlılıklar için yamalayın
Kafka Güvenliğini Güçlendirme
Kafka dağıtımınızı güvene almak için:
TLS Şifrelemesini Etkinleştirin: Tüm bağlantılar için SSL/TLS yapılandırarak aktarım halindeki veriyi koruyun.
Yetkilendirme Kurun: İstemci izinlerini kontrol etmek için Access Control List (ACL) tanımlayın.
Kimlik Bilgilerini Düzenli Olarak Döndürün: Parolaları ve anahtarları riski en aza indirmek için periyodik olarak değiştirin.
İzleyin ve Denetleyin: Küme içindeki erişimi ve değişiklikleri takip etmek için denetim günlüklerini etkinleştirin
Sonuç
Docker, entegrasyon, öğrenme veya üretime benzer testler için Apache Kafka kümelerini başlatmayı, ayarlamayı ve denemeyi son derece kolaylaştırır. Konteynerlar sizi host işletim sistemi sorunları ve bağımlılık uyumsuzluklarından yalıtır; geliştirme ve test ortamlarınızın beklentilerinize uygun olduğuna dair güven sağlar. Basit yerel kümelerden orkestre edilmiş Kafka platformlarına doğru büyürken, sağlam Docker kurulumlarına ve en iyi uygulamalara yatırım yapmak ekibinize zaman ve hayal kırıklığından tasarruf sağlayacaktır.
Kafka ve Docker hakkında daha fazla bilgi için kapsamlı kurslarımızdan bazılarına göz atın:
Docker’da Kafka çalıştırmak için Zookeeper’a ihtiyacım var mı?⌄
Gerekli değil. Geleneksel Kafka kurulumları Zookeeper’a dayanırken, daha yeni sürümler KRaft modunu destekler ve küme eşgüdümünü dahili hale getirerek Zookeeper ihtiyacını ortadan kaldırır. Ancak birçok Docker Compose örneği uyumluluk ve kararlılık için varsayılan olarak hâlâ Zookeeper kullanır. ZooKeeper 3.5 sürümünde kullanımdan kaldırıldı ve 4.0’da kaldırılması planlanıyor.
Docker’da Kafka’yı üretim iş yükleri için kullanabilir miyim?⌄
Kubernetes veya Docker Swarm gibi orkestrasyon araçları olmadan dağıtım yapmak mümkün olsa da her zaman önerilmez. Üretimde kalıcılık, izleme, güvenlik, ölçekleme ve failover desteğini göz önünde bulundurun. Docker, geliştirme ve test için idealdir ancak üretim için dikkatli planlama gerektirir.
Docker kullanırken Kafka istemcim neden bağlantı hataları alıyor?⌄
İstemci bağlantı sorunlarının çoğu yanlış KAFKA_ADVERTISED_LISTENERS ayarlarından kaynaklanır. Dinleyici değerinin, istemcinin bağlanmak için kullandığı adresi yansıttığından (örn. yerel geliştirme için localhost:9092) ve Docker portlarının doğru şekilde açıldığından emin olun.
Hangi Kafka Docker imajını kullanmalıyım: Confluent, Bitnami mi yoksa Apache mi?⌄
Tam özellikli kurulumlar ve ileri düzey testler için Confluent imajını, sade yerel geliştirme için Bitnami’yi, minimal ve özelleştirilebilir yapılar için Apache’yi kullanın. Kullanım durumunuza, kaynak gereksinimlerinize ve güvenlik ihtiyaçlarınıza göre seçin.
Kafka konteyner yeniden başlatmalarında veriyi nasıl kalıcı kılarım?⌄
Her zaman /var/lib/kafka/data ve (kullanılıyorsa) /var/lib/zookeeper konumlarına eşlenen Docker birimleri veya bind mount’lar kullanın. Konteyner dosya sistemleri geçicidir; harici depolama olmadan tüm mesajlar ve konular yeniden başlatmalarda kaybolur.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Modern veri hatları ve mikro hizmetler dünyasında Apache Kafka, gerçek zamanlı olay akışlarını yönetmek ve dağıtık sistemleri entegre etmek için başvurulan bir çözüm olarak öne çıkıyor. Daha fazla mühendislik ekibi ölçeklenebilir, olaya dayalı mimarilere yöneldikçe Kafka güvenilir veri hareketinin merkezine yerleşiyor.
Bu eğilime paralel olarak Docker, geliştiricilerin karmaşık hizmetleri tutarsız ortamlar veya yerel sorunlar hakkında endişelenmeden yönetmesi, paylaşması ve dağıtması için önde gelen yol haline geldi.
Kafka’yı Docker ile çalıştırarak ekipler test, kavram kanıtlama demoları veya hatta üretim iş yükleri için üretime benzer kümeleri hızla ayağa kaldırabilir.
Bu makale, Kafka ile çalışmayı sade ve tekrarlanabilir hale getirmek isteyen orta seviye backend geliştiricileri, DevOps mühendisleri ve veri platformlarını yöneten herkese yöneliktir.
Kafka veya Docker’a yeniyseniz, Introduction to Apache Kafka kursumuza ya da Docker for Beginners: A Practical Guide to Containers içeriğimize göz atmayı unutmayın.
Kafka nedir ve neden Docker kullanmalı?
Apache Kafka, yüksek aktarım kapasiteli, hataya dayanıklı ve ölçeklenebilir mesajlaşma için tasarlanmış dağıtık bir akış platformudur.
Veri üreticileri ile tüketicileri arasında kalıcı ve yüksek hızlı bir hat görevi görür. Mikro hizmetleri bağlamanız, veri akışlarını orkestre etmeniz veya gerçek zamanlı analitik işlemeniz gerektiğinde Kafka genellikle tercih edilen araçtır.
Kafka Streams Eğitimi ile Kafka Streams kullanarak gerçek zamanlı veri işleme uygulamalarını nasıl oluşturacağınızı öğrenebilirsiniz. Eğitim, temel kavramları, Java & Python uygulamalarını ve ölçeklenebilir akış uygulamaları geliştirmek için adım adım örnekleri kapsar.
Kafka’yı çalıştırmak karmaşık olabilir. Deneyimli mühendisler bile broker’lar, konular (topic), bölümler (partition) ve Zookeeper veya KRaft gibi gerekli bileşenlerin karmaşıklığını yorucu bulabilir.
Docker, ikili dosyaları, bağımlılıkları ve yapılandırmaları konteynerlara paketleyerek süreci basitleştirir.
Docker ile mühendisler herhangi bir makinede Kafka kümesini başlatabilir, meslektaşlarıyla aynı kurulumları paylaşabilir ve yaygın “benim makinemde çalışıyor” baş ağrısından kaçınabilir. Dockerize Kafka özellikle şu alanlarda popülerdir:
Apache Kafka for Beginners rehberimizle Apache Kafka’yı keşfedin. Temelleri öğrenin, başlayın ve bu güçlü olay akışı platformunun gelişmiş özellikleri ile gerçek dünya kullanım alanlarını ortaya çıkarın.
Docker’da Kafka’nın Temelleri
Orkestrasyona dalmadan önce, hem Kafka’nın teknik parçalarını hem de Docker’ın dizüstü bilgisayar veya sunucu üzerinde dağıtık doğasını nasıl yeniden yarattığını parçalarına ayırmak faydalı olacaktır.
Learn Docker from Scratch eğitimimizde de öğreneceğiniz üzere Docker, Kafka gibi uygulamaların konteynerizasyon yoluyla dağıtımını, ölçeklenmesini ve yönetimini basitleştiren popüler bir araçtır.
Kafka mimarisinin temelleri
Kafka’nın belkemiği, mesajları depolayan, alan ve sunan sunucu süreci olan broker’dır. Her küme birden fazla broker’dan oluşabilir; veri ve yük dağıtılır.
Her broker’ın içinde konular (mesajları düzenlemek için adlandırılmış kanallar) ve bölümler (paralellik ve dayanıklılık için olayları birçok sunucuya yayan alt kanallar) bulunur. Üreticiler (producer) veriyi konulara yazar, tüketiciler (consumer) ise bu mesajlara abone olur ve işler.
Eşgüdüm kritik önemdedir. Geleneksel olarak Kafka, broker metadatasını, bölüm liderliğini ve genel küme sağlığını yönetmek için Zookeeper’a dayanır. Daha yeni dağıtımlarda ise bu eşgüdümü Kafka’nın içine alan ve Zookeeper bağımlılığını kaldıran KRaft modu kullanılabilir. ZooKeeper 3.5 sürümünde kullanımdan kaldırıldı ve 4.0’da kaldırılması planlanıyor.
Makine öğrenimi uygulamalarını Docker ve Kubernetes ile nasıl konteynerize edeceğinizi How to Containerize an Application Using Docker eğitimimizle öğrenin.
KRaft modu: Kafka’nın mimarisini sadeleştirme
Kafka, 2.8 sürümünden itibaren KRaft modunu tanıttı; bu sayede küme eşgüdümünü Zookeeper’a ihtiyaç duymadan dahili olarak yönetebiliyor ve 3.3 sürümünde üretim için hazır ilan edildi. Bu değişim, dağıtımları basitleştirir ve yönetilmesi gereken bileşen sayısını azaltır.
Docker Compose kullanarak KRaft modunda Kafka kurmak için:
Bu yapılandırma, KRaft modunda tek düğümlü bir Kafka kümesi kurar ve Zookeeper ihtiyacını ortadan kaldırır.
Docker’ın olmazsa olmazları
Kafka’yı Docker ile çalıştırmak için yalnızca birkaç temel bileşene ihtiyacınız var: Docker Engine (çalışma zamanı) ve çoğunlukla çoklu konteyner yönetimi için Docker Compose.
Compose dosyaları, birden fazla servisi (Kafka, Zookeeper, Kafka UI vb.), bunların ağlarını, ortam değişkenlerini ve depolama bağlarını belirtmenizi sağlar. Docker’ın ağ yapısı, her broker’a kendi konteynerını, host adını ve portlarını vererek tek bir makinede bile çoklu broker kümelerini taklit etmeyi mümkün kılar.
Docker’ı öğrenmenin en iyi yollarından biri projelerle pratik yapmaktır. Şu 10 Docker Proje Fikri ile pratik yapın.
Docker Compose ile Kafka Kurulumu
Docker Compose, birbiriyle etkileşen birden çok konteyner gerektiren uygulamaları çalıştırmanın sıklıkla tercih edilen yoludur. Kabuk betikleri veya manuel komutlarla uğraşmak yerine Compose, tüm servisleri ve bağlantılarını tek bir YAML dosyasında tanımlamanıza olanak tanır.
Bu yaklaşım yapılandırma sapmasını azaltır, işe alıştırmayı hızlandırır ve herkesin geliştirme için aynı yığını kullanmasını garanti eder.
Minimal Compose kurulumu
Yerel geliştirme için Kafka ve Zookeeper’ı başlatan basit bir
docker-compose.ymlşöyle:Bu minimal kurulum, ilgili portları eşler, Kafka’yı Zookeeper’a bağlar ve konteynerlar yeniden başlarsa mesajların kaybolmaması için bir Docker birimini bağlar. Broker kimliği, dinleyici adresleri ve servisler arası bağlantı uç noktalarını yapılandırmak için ortam değişkenlerini kullandığınızdan emin olun.
Kafka’yı iyi anlamak, veri mühendisliği mülakatlarında başarı için kritiktir. Bir sonraki veri mühendisliği mülakatınıza, bu 20 Kafka Mülakat Sorusu ile hazırlanın.
Genişletilmiş yapılandırma
Profesyonel kurulumlar genellikle mesajları yönetmeyi ve incelemeyi kolaylaştırmak için Kafka UI, Schema Registry veya REST Proxy gibi araçlar ekler. Bunlar compose dosyanızdaki services bloğuna eklenebilir. Örneğin:
Kafka konularını ve günlüklerini yeniden başlatmalar arasında kalıcı kılmak, kurtarma senaryolarını veya uzun süre çalışan işlerini test etmek için gereklidir. Her broker için
/var/lib/kafka/datave eğer kullanılıyorsa Zookeeper için/var/lib/zookeeperkonumlarına Docker birimleri bağlamayı unutmayın.Doğru imajı seçmek kilittir. Hızlı bir özet:
Kafka Docker İmajı
Bakımcı
Özellikler
En İyi Kullanım Senaryosu
Confluent
Confluent
Tam set, çok sayıda eklenti
Üretime yakın kurulumlar, ileri düzey testler
Bitnami
Bitnami
Temiz, minimal
Yerel geliştirme, kaynak kısıtlı ortamlar
Apache Kafka (KRaft)
Apache
Zookeeper’sız, sadeleştirilmiş kurulum
Modern dağıtımlar, sade mimari
How to Learn Apache Kafka in 2025 eğitimi, Kafka hakkında daha fazla ayrıntıya giriyor; arasında şunlar var
Docker’da Kafka ile Etkileşim
Kafka Docker Compose ile çalışır hale geldiğinde, tıpkı standart bir dağıtımda olduğu gibi anında konu oluşturabilir ve veri gönderebilirsiniz.
CLI erişimi ve Kafka komutları
docker-compose execveyadocker execkullanarak Kafka CLI araçlarını çalıştırın. Örneğin bir konu oluşturmak için şunu çalıştırabilirsiniz:kafka-console-producer.shvekafka-console-consumer.sharaçlarını da aynı şekilde kullanabilirsiniz. Bu, yerel ortamınızı kirletmeden entegrasyon testi veya denemeler için hızlı bir geri bildirim döngüsü sağlar.Uygulamalardan programatik erişim
Uygulamalar ve betikler, containerize Kafka’nıza host’un duyurduğu bootstrap sunucuları üzerinden bağlanabilir. Yerel uygulamalar için
bootstrap.servers=localhost:9092veya eşdeğerini ayarlayın.Yaygın istemciler arasında Python, Java, NodeJS ve Go için resmi Kafka kütüphaneleri bulunur. Uygulamanızın ağ katmanının doğru port ve adreslere ulaşabildiğinden emin olun.
Docker Ağ Yapısı ve Kafka Bağlanabilirliği
Kafka’nın ağ yapılandırması sıklıkla zorluk çıkarır. Dahili ve harici dinleyicileri ve servislerin nasıl dışa açılacağını anlamak hayati önem taşır.
Dahili ve harici dinleyiciler
Kafka broker’ları, istemci bağlantılarını kontrol etmek için dinleyiciler kullanır. İki yaygın kurulum şunlardır:
PLAINTEXT://:9092yerel, güvenli olmayan trafik için; özellikle geliştirmedeSSLveyaSASL_SSLdinleyicilerdocker-composeiçinde doğru portları dışa açın veKAFKA_ADVERTISED_LISTENER’ların uygulamalarınızın kullandığı gerçek host ve porta uyduğundan emin olun. Bir VM’de veya bulutta çalışıyorsanız bu yapılandırmayı genel IP ve eşlenen porta ayarlayın.Boyut
Dahili Dinleyici
Harici Dinleyici
Yaygın Protokol
PLAINTEXT://:9092
SSL://, SASL_SSL:// veya eşlenen PLAINTEXT://
Güvenlik
Şifrelenmemiş, kimlik doğrulaması yok
Şifreli ve/veya kimliği doğrulanmış
Tipik Kullanım
Yerel geliştirme, konteynerlar arası trafik
Uzak istemciler, bulut VM’leri, üretim erişimi
Docker Compose Kurulumu
9092 portunu ağ içinde açın
9092’yi host’a eşleyin, KAFKA_ADVERTISED_LISTENERS’ı genel IP’ye ayarlayın
Yapılandırma Odağı
Basitlik ve hız
Güvenilirlik, güvenlik, genel erişim
Ağ Kapsamı
Localhost veya dahili Docker ağı
Genel IP veya dışa dönük alan adı
Çeşitli istemci erişimleri için birden fazla dinleyici yapılandırma
Docker ortamlarında farklı istemci erişim senaryolarını yönetmek için birden fazla dinleyici kurmak yaygındır:
Bu kurulum, dahili Docker istemcilerinin
INTERNALdinleyicisi üzerinden, harici istemcilerin iseEXTERNALdinleyicisi üzerinden bağlanmasına olanak tanır.Bağlantı sorunlarını giderme
Yaygın hatalar arasında ‘broker not available’, ‘connection refused’ veya istemci zaman aşımları bulunur. Şunları doğrulayın:
docker-compose psile sağlıklı mıkafka:9092)Üretime Benzer Ortamlarda Kafka Docker
Yerel testlerin ötesinde, Dockerize Kafka ortamları aşamalı ortamlar ve CI/CD için de yardımcıdır.
Konteyner orkestrasyon stratejileri
Docker Swarm ve Kubernetes gibi orkestratörler, çoklu broker Kafka kurulumlarını, yuvarlanan güncellemeleri ve servis keşfini yönetebilir. Her broker kendi konteynerını alır ve kalıcı depolama eklenir.
Kubernetes’te
StatefulSet’ler sıralı dağıtımı yönetir ve her broker için sabit DNS adları oluşturur.Günlükleme ve izleme
Kafka günlüklerini analiz için Docker log sürücüsüne veya harici depolamaya yönlendirin. Birçok ekip, sorun gidermek için günlükleri Elasticsearch, Loki veya Splunk’a aktarır. Küme izlemesi için Dockerize Kafka’yı Prometheus ve Grafana ile eşleştirin.
Docker’da Kafka için Optimizasyon İpuçları
Kafka’nın performansı dikkatli kaynak ve depolama yönetimine bağlıdır.
Kaynak tahsisi
Her broker konteynerına üretime mümkün olduğunca yakın CPU, RAM ve disk verin. Docker kaynak sınırlarını ayarlayın ve yığın belleği ile çöp toplayıcı ayarları için
KAFKA_JVM_PERFORMANCE_OPTSile JVM seçenekleri geçin.Kalıcı depolama
/var/lib/kafka/datave/var/lib/zookeeperiçin her zaman Docker birimleri veya bind mount’lar kullanın; veriyi konteyner içinde tutmak yeniden başlatmalarda kayba yol açar ve dayanıklılık testlerini boşa çıkarır. Yüksek disk aktarım hızı, özellikle CI/CD yük testlerinde sürdürülebilir performans için kritiktir.En İyi Uygulamalar ve Yaygın Tuzaklar
İstikrar, sürdürülebilirlik ve ekip verimliliği birkaç en iyi uygulamadan fayda görür.
Yapılandırma yönetimi
Gizleri ve yapılandırmaları haricen
.envdosyalarıyla veya bağlanan yapılandırma dizinleriyle yönetin. Hassas verileri aslacomposeYAML’ınıza sabitlemeyin. Yeniden kullanılan kurulumlar için şablonlama araçlarını veya yapılandırma yönetimi çerçevelerini düşünün.Yaygın hatalar
Yaygın hatalardan kaçınma
Kafka Güvenliğini Güçlendirme
Kafka dağıtımınızı güvene almak için:
Sonuç
Docker, entegrasyon, öğrenme veya üretime benzer testler için Apache Kafka kümelerini başlatmayı, ayarlamayı ve denemeyi son derece kolaylaştırır. Konteynerlar sizi host işletim sistemi sorunları ve bağımlılık uyumsuzluklarından yalıtır; geliştirme ve test ortamlarınızın beklentilerinize uygun olduğuna dair güven sağlar. Basit yerel kümelerden orkestre edilmiş Kafka platformlarına doğru büyürken, sağlam Docker kurulumlarına ve en iyi uygulamalara yatırım yapmak ekibinize zaman ve hayal kırıklığından tasarruf sağlayacaktır.
Kafka ve Docker hakkında daha fazla bilgi için kapsamlı kurslarımızdan bazılarına göz atın: