Kafka
Genel Bakış
Amacı Nedir?
Kafka Connection (Bağlantı), Integration Flow veya Connector adımlarının merkezi topic erişim bilgilerini tek bir yerde saklayarak tekrar kullanılabilir hale getirir.
Çeşitli Kafka üretici/consumer özelliklerini propertiesMap üzerinden yöneterek mesajlaştırma altyapısında standart yapılandırmayı korur.
Enable Secure aktif edildiğinde SSL/TLS parametrelerini zorunlu kılarak kritik veri trafiğinin şifrelenmesini garanti altına alır.
Test Connection fonksiyonu ile bağlantı parametreleri Deployment öncesinde doğrulandığından, hata yakalama süreci hızlanır.
Çalışma Prensibi
Integration Flow veya Connector içerisinden Kafka Message Queue bağlantısı talep edildiğinde, sistem yapılandırılmış connection parametrelerini okur.
Kafka producer/consumer havuzu, propertiesMap içerisinde tanımlanan max.block.ms, reconnect.backoff.max.ms gibi değerleri kullanarak mevcut bağlantıları yeniden kullanır veya yeni bağlantı açar.
Enable Secure aktifse karşılıklı sertifika tabanlı Authentication uygulanır; opsiyonel olarak SASL/SCRAM bilgileri de propertiesMap içinden okunur.
TCP üzerinden Kafka wire protokolü ile topic'e mesaj gönderilir veya tüketilir; serializer ayarları propertiesMap'teki key.serializer ve value.serializer alanlarından alınır.
İşlem tamamlandıktan sonra bağlantı pool'a geri döner; enable toggle pasif hale getirilmiş bağlantılar hiçbir Flow tarafından seçilemez.
Bağlantı hatası, timeout veya authentication hatası durumunda retry.backoff.ms ve max.block.ms değerlerine göre yeniden deneme yapılır, sonuç Apinizer mesaj servisine aktarılır.
Kullanım Alanları
Integration Flow içindeki "Send Message" veya "Consume Message" adımlarının tek tip Kafka topic'lerini hedeflemesi
Connector tabanlı veri toplama süreçlerinde merkezi Kafka yapılandırmasının paylaşılması
Scheduled Job'larda belirli aralıklarla Kafka'ya telemetri veya log gönderimi
Teknik Özellikler ve Yetenekler
Temel Özellikler
Zorunlu topicName alanı sayesinde her Connection belirli bir topic'e odaklanır ve Integration Flow adımlarında hatalı topic seçiminin önüne geçer.
İstenilen Kafka client parametreleri propertiesMap üzerinden anahtar-değer yapısında tutulur, MapValue tipleri sayesinde string, integer veya secret veriler ayrıştırılır.
UI tarafındaki debounce mekanizması aynı isimde bir Connection oluşturulmasını engeller ve çakışmaları erken uyarır.
Her ortam (Development, Test, Production) için ayrı connection parametreleri tanımlama imkanı.
Connection'ı aktif veya pasif hale getirme (enable/disable toggle). Pasif durumda bağlantı kullanılamaz ancak yapılandırması saklanır.
İleri Düzey Özellikler
SASL mekanizmaları propertiesMap içerisine eklenerek şifreli Authentication senaryoları kod değişikliği olmadan uygulanır.
Enable Secure a çıkken hem KeyStore hem TrustStore seçilebilir, gerekirse yeni kayıtlar anlık olarak Secret Manager'da oluşturulur.
Birden fazla SSLContext protokolü (TLSv1.2, TLSv1.3 vb.) MultiSelect ile seçilip aynı Connection üzerinde saklanır.
"Test Connection" butonu ile bağlantı parametrelerini kaydetmeden önce doğrulama imkanı.
Connection yapılandırmasını ZIP dosyası olarak export etme. Farklı ortamlara (Development, Test, Production) import etme. Versiyon kontrolü ve yedekleme imkanı.
Bağlantı sağlığı, pool durumu ve performans metriklerini izleme.
Connection Parametreleri
Zorunlu Parametreler
Açıklama: Connection adı (benzersiz olmalı)
Örnek Değer: Production_KafkaTopic01
Notlar: Boşlukla başlamaz, özel karakterler kullanılmamalı
Açıklama: Bağlantının Deployment alacağı ortam kimliği
Örnek Değer: Development
Notlar: Ortam değiştirmek aynı Connection içinde parametrik yönetim sağlar
Açıklama: Kafka üzerinde hedeflenen topic adı
Örnek Değer: audit.events.v1
Notlar: Producer ve consumer adımlarında aynı topic kullanılmalıdır
Açıklama: Kafka client için anahtar-değer çiftleri (bootstrap.servers vb.)
Örnek Değer: bootstrap.servers=broker1:9092
Notlar: En az bir kayıt olmalı; MapValue tipleri doğru seçilmelidir
İsteğe Bağlı Parametreler
Açıklama: Connection amaç hakkındaki açıklama
Varsayılan Değer: (Boş)
Önerilen Değer: Prod audit topic publish connection
Açıklama: SSL/TLS kullanımını açar
Varsayılan Değer: false
Önerilen Değer: true (Production)
Açıklama: Enable Secure olduğunda izin verilen SSLContext protokolleri
Varsayılan Değer: (Boş)
Önerilen Değer: TLSv1.2, TLSv1.3
Açıklama: İstemci sertifikasını içeren keystore kaynağı
Varsayılan Değer: (Boş)
Önerilen Değer: ks-prod-clients
Açıklama: Broker sertifikasını doğrulayan truststore kaynağı
Varsayılan Değer: (Boş)
Önerilen Değer: ts-shared-root
Açıklama: connectionConfigKafka.model.ts içinde true gelir
Varsayılan Değer: true
Önerilen Değer: true
Timeout ve Connection Pool Parametreleri
Açıklama: Bağlantı kurulması için maksimum bekleme süresi
Varsayılan: 3000
Min: 1000 | Max: 60000
Birim: milisaniye
Açıklama: İstek yanıtı için maksimum bekleme süresi
Varsayılan: 3000
Min: 1000 | Max: 120000
Birim: milisaniye
Açıklama: Connection pool'daki maksimum bağlantı sayısı (client instance)
Varsayılan: 10
Min: 1 | Max: 200
Birim: adet
Açıklama: retry.backoff.ms değeri, tekrar denemeler arası bekleme
Varsayılan: 3000
Min: 100 | Max: 10000
Birim: milisaniye
Kullanım Senaryoları
Durum: Tüm servisler audit topic'ine mesaj basmalı
Çözüm: topicName=audit.events, bootstrap.servers=cluster-prod:9092
Beklenen Davranış: Audit mesajları tek topic'te toplanır, denetim ekibi tek noktadan tüketir
Durum: Aynı Connection farklı ortamlarda kullanılmalı
Çözüm: Environment=Development, Enable Secure=false
Beklenen Davranış: Ortam seçimi ile farklı broker URL'leri yönetilir
Durum: Prod broker TLS zorunlu
Çözüm: Enable Secure=true, ProtocolTypes=TLSv1.3, KeyStoreId=ks-prod
Beklenen Davranış: Sertifika doğrulaması sağlanır, mesajlar şifreli gider
Durum: Ani trafik artı var
Çözüm: Pool Size=50, linger.ms=5, batch.size=32768
Beklenen Davranış: Üretici batch'leri büyür, throughput artar
Durum: Broker ara ara yanıt vermiyor
Çözüm: retry.backoff.ms=5000, retries=10
Beklenen Davranış: Otomatik yeniden denemeler ile mesaj kaybı yaşanmaz
Durum: Mesaj gecikmeleri ölçülmeli
Çözüm: delivery.timeout.ms=60000, enable.idempotence=true
Beklenen Davranış: Üretici timeouts loglanır, SLA raporları beslenir
Connection Yapılandırma
Yeni Kafka Oluşturma
Yapılandırma Adımları
- Sol menüden Connection → Kafka bölümüne gidin.
- Sağ üstteki [+ Create] butonuna tıklayın.
Enable Status (Aktif Durumu):
- Toggle ile aktif/pasif durumu ayarlayın. Yeni connection'lar varsayılan olarak aktiftir.
Name (İsim) - Zorunlu:
- Örnek:
Production_KafkaAudit - Benzersiz isim girin, boşlukla başlamaz.
- Sistem otomatik kontrol eder. Yeşil tik: kullanılabilir. Kırmızı çarpı: mevcut isim.
Description (Açıklama):
- Örnek: "Audit topic producer connection"
- Maks. 1000 karakter.
- Connection'ın amacını açıklayın.
Sayfanın üst kısmındaki işlem butonları alanında, [<> Variable] butonunu kullanarak dinamik değer seçebilir, Global variable ifadeleri sayesinde connection parametrelerini sabit değer yerine değişken tabanlı yönetebilirsiniz. Detaylı bilgi için Dinamik Değişkenler sayfasını inceleyebilirsiniz.
- Dropdown menüden ortam seçin: Development, Test, veya Production.
- Her ortam için farklı connection parametreleri tanımlanabilir.
- propertiesMap tablosuna broker URL'leri, serializer ayarları ve timeout değerlerini girin.
- Her kayıt için valueType seçmeyi unutmayın; sayı değerlerinde INTEGER kullanın.
- Topic Name alanına bağlanılacak topic'i yazın.
Birden fazla broker URL'si ekleyerek yüksek erişilebilirlik sağlayabilirsiniz.
- Enable Secure toggle'ını açarak TLS'i zorunlu kılın.
- Protocol Types alanında desteklenen SSLContext protokollerini seçin.
- KeyStore ve TrustStore seçimlerini yapın veya yeni keystore oluşturun.
Production ortamında mutlaka SSL/TLS kullanın ve güvenli protokolleri seçin.
- max.block.ms, request.timeout.ms, retry.backoff.ms gibi parametreleri propertiesMap içine ekleyin.
- Trafik hacmine göre linger.ms, batch.size, connections.max.idle.ms gibi ayarları belirleyin.
- SASL/SCRAM kullanılıyorsa sasl.mechanism, sasl.jaas.config anahtarlarını ekleyin.
- Broker sertifikaları için doğru TrustStore seçildiğinden emin olun.
- Hassas credential değerlerini plaintext yerine Secret türü MapValue ile saklayın.
Hassas bilgileri mutlaka Secret tipinde MapValue olarak saklayın.
- [Test Connection] butonuna tıklayın.
- Bağlantı parametrelerinin doğru olup olmadığını test edin.
- Başarılı: Yeşil onay mesajı
- Başarısız: Hata detayları gösterilir
- Sağ üstteki [Save and Deploy] butonuna tıklayın.
Kontrol Listesi:
- Benzersiz isim
- Zorunlu alanlar dolu
- Test connection başarılı (önerilir)
Sonuç:
- Connection listeye eklenir
- Integration Flow ve Connector adımlarında kullanılabilir hale gelir
- Ortama göre aktif olur
Connection başarıyla oluşturuldu! Artık Integration Flow ve Connector adımlarında kullanabilirsiniz.
Connection'ı Silme
Connection'ı silmek için:
- Connection listesinde satır sonundaki ⋮ menüsünden Delete seçeneğini tıklayın.
- Onay dialogunda silme işlemini onaylayın.
Silmeden Önce Kontrol Edin:
- Integration Flow veya Connector adımlarında kullanılıyor olabilir.
- Gerekirse alternatif bir connection atayın.
- Silmeden önce Export ile yedek alın.
- Silmek yerine connection'ın aktif durumunu pasif hale getirin.
- Connection pasif olur ancak silinmez.
- Gerektiğinde aktif hale getirerek yeniden kullanabilirsiniz.
Connection'ı Dışa/İçe Aktarma
Bu adımda kullanıcı, mevcut connection'ları yedekleme, farklı ortamlara taşıma veya paylaşma amacıyla dışa aktarabilir (export) ya da daha önce dışa aktarılmış bir connection'ı tekrar içe aktarabilir (import). Bu işlem, sürüm yönetimi, test ve üretim ortamları arasında geçiş veya ekipler arası paylaşım süreçlerinde veri bütünlüğünü korumak için kullanılır.
Dışa Aktarma (Export)
- Connection listesinde satır sonundaki ⋮ menüsünden Export seçeneğini tıklayın.
- ZIP dosyası otomatik olarak indirilir.
Format: {Date}-kafka-integration-{ConnectionName}-export.zip
Örnek: 13 Nov 2025-kafka-integration-Production_KafkaAudit-export.zip
- Connection JSON dosyası
- Metadata bilgileri
- Bağımlılık bilgileri (örneğin sertifikalar, key store)
- Yedekleme
- Ortamlar arası taşıma (Test → Prod)
- Versiyonlama
- Ekip veya proje bazlı paylaşım
İçe Aktarma (Import)
- Ana listede [Import Kafka] butonuna tıklayın.
- İndirilen ZIP dosyasını seçin.
- Sistem kontrolleri: Format geçerli mi? İsim çakışması var mı? Bağımlılıklar mevcut mu?
- Ardından [Import] butonuna tıklayın.
Senaryo 1: İsim Çakışması → Eski connection'ın üzerine yazın veya yeni bir isimle oluşturun.
Senaryo 2: Eksik Bağımlılıklar → Eksik sertifikaları veya key store'ları önce oluşturun veya import sırasında çıkarın.
Connection'ın Kullanım Alanları
Adımlar:
- Connection'ı oluşturun.
- Test Connection ile bağlantıyı doğrulayın.
- Save and Deploy ile kaydedin ve etkinleştirin.
- Connection'ın Enabled durumda olduğundan emin olun.
Kafka topic tabanlı mesaj gönderme ve tüketme gerektiren adımlarda connection seçilir. Örnek: "Send Message", "Consume Message", "Kafka Producer", "Kafka Consumer" gibi adımlar. Bağlantı seçimi bu adımların yapılandırmasında yer alan Connection alanından yapılır.
Zamanlanmış görevlerde (ör. belirli aralıklarla Kafka'ya mesaj gönderme, telemetri toplama vb.) bağlantı seçilerek Kafka broker'larına erişim sağlanır. Connection değiştiğinde, job çalışma davranışı da buna göre güncellenir.
Connection Test özelliği ile bağlantının doğruluğu Integration Flow'dan bağımsız olarak kontrol edilebilir. Bu test hata ayıklama sürecinde kritik önem taşır.
Best Practices
Yapılması Gerekenler ve En İyi Uygulamalar
Kötü: Tüm mesajları tek partition'a yazmak.
İyi: Trafiği partition sayısını artırarak yaymak.
En İyi: Partition planını tüketici sayısı ve throughput ihtiyacına göre per topic belirlemek
Kötü: Değerleri rastgele eklemek.
İyi: Değişiklikleri manuel takip etmek.
En İyi: propertiesMap değişikliklerini export dosyalarıyla version control altında tutmak
Kötü: Keystore/Truststore son kullanma tarihlerini takip etmemek.
İyi: Manuel takvim tutmak.
En İyi: Secret Manager event'leri ve monitoring alarmlarıyla sertifika yenilemelerini otomatik planlamak
Kötü: Connection health'i izlememek.
İyi: Manuel test yapmak.
En İyi: Connection Monitoring metriklerini APM/Prometheus ile takip edip otomatik alarm üretmek
Kötü: Tüm ortamlarda aynı connection parametrelerini kullanmak.
İyi: Her ortam için ayrı connection oluşturmak.
En İyi: Environment seçeneğini kullanarak tek connection'da tüm ortamları yönetmek, ortamlar arası geçişte sadece environment değiştirmek
Kötü: Connection'ı test etmeden kaydetmek ve deploy etmek.
İyi: Kaydetmeden önce Test Connection ile doğrulamak.
En İyi: Her parametre değişikliğinden sonra test etmek, production'a geçmeden önce test ortamında tam entegrasyon testi yapmak
Güvenlik En İyi Uygulamaları
SASL kullanıcı adı/şifresi veya token bilgilerini Secret tipinde MapValue ile saklayın; JAAS config içinde inline credential bırakmayın
Kafka broker'larına yalnızca whitelisted IP aralıklarından erişim verin, gerekmeyen portları kapatın
Bootstrap veya credential içeren log satırlarını maskeleyin; debug loglarında plaintext credential bırakmayın
Kullanıcı adı ve şifre gibi hassas bilgileri environment variable veya secret manager kullanarak saklayın. Kimlik bilgilerini kod veya konfigürasyon dosyalarına hardcode etmeyin. Periyodik olarak şifreleri güncelleyin
Production ortamında mutlaka SSL/TLS aktif edin. Self-signed sertifikalar sadece development ortamında kullanın. Sertifika expiration tarihlerini takip edin ve zamanında yenileyin
Connection yapılandırmasını sadece yetkili kullanıcıların değiştirmesine izin verin. Connection değişiklik loglarını saklayın. Kritik connection'lar için değişiklik approval süreci uygulayın
Kaçınılması Gerekenler
Neden kaçınılmalı: Broker arızasında bağlantı kopar.
Alternatif: Birden fazla bootstrap.servers adresi tanımlayın
Neden kaçınılmalı: Mesaj deserilize edilemez, hata oluşur.
Alternatif: Key/Value serializer'ları mesaj formatına göre belirleyin
Neden kaçınılmalı: Credential sızıntısı riski vardır.
Alternatif: Secret MapValue kullanın
Neden kaçınılmalı: Test verileri production sistemine yazılabilir, gerçek kullanıcılar etkilenebilir, güvenlik riski oluşur.
Alternatif: Her ortam için ayrı connection oluşturun, environment parametresini kullanın, connection isimlerini ortama göre prefix ekleyerek ayırın (Test_, Prod_)
Neden kaçınılmalı: Ağ gecikmelerinde connection sürekli timeout olur, Entegrasyon adımları başarısız olur.
Alternatif: Gerçek kullanım senaryolarına göre timeout değerlerini ayarlayın, network latency'yi ölçün ve timeout'ları buna göre belirleyin
Neden kaçınılmalı: Her istekte yeni bağlantı açılır, performans düşer, kaynak tüketimi artar, hedef sistem yükü artar.
Alternatif: Connection pool aktif edin, pool size'ı trafik hacmine göre ayarlayın, pool monitoring kurun
Performans İpuçları
Öneri: batch.size değerini mesaj boyutuna göre ayarlayın (örn. 32 KB).
Etki: Daha az ağ çarpışı ile throughput artar
Öneri: compression.type olarak snappy veya lz4 seçin.
Etki: Broker üzerindeki bant genişliği azalır
Öneri: acks ve linger.ms ayarlarını optimize ederek asenkron üretimi tercih edin.
Etki: İstemci bekleme süresi kısalır
Öneri: Pool size'ı peak trafiğe göre ayarlayın (önerilen: eşzamanlı istek sayısı × 1.5), idle connection timeout'ları belirleyin, pool health check yapın.
Etki: Bağlantı açma maliyeti %80 azalır, yanıt süreleri düşer, kaynak kullanımı optimize edilir
Öneri: Gerçek network latency'yi ölçün, timeout değerlerini buna göre ayarlayın, çok düşük veya çok yüksek timeout'lardan kaçının.
Etki: Gereksiz beklemeler önlenir, hızlı fail-over sağlanır, kullanıcı deneyimi iyileşir
Öneri: Connection pool kullanımını izleyin, timeout oranlarını takip edin, connection health check yapın, alerting kurun.
Etki: Sorunlar proaktif tespit edilir, performans darboğazları erken belirlenir, kesinti süresi azalır
Sorun Giderme (Troubleshooting)
Topic Bulunamadı
Topic adı hatalı, Broker'da topic oluşturulmamış veya ACL izinleri eksik olabilir.
topicName alanını doğrulayın.
Broker yöneticisinden topic durumunu kontrol ettirin.
ACL politikalarına ilgili kullanıcıyı ekleyin.
Broker Authentication Hatası
Yanlış SASL bilgisi, sertifika geçersiz veya TrustStore eksik olabilir.
SASL MapValue'ları güncelleyin.
Sertifikanın süresini kontrol edin.
Doğru TrustStore seçildiğinden emin olun.
Connection Timeout
Network gecikmesi, hedef sistem yavaş yanıt veriyor veya timeout değeri çok düşük olabilir.
Network connectivity kontrol edin.
Hedef sistem sağlığını kontrol edin.
Timeout değerlerini artırın.
Connection loglarını inceleyin.
Authentication Failed
Yanlış kullanıcı adı/şifre, expired credentials veya yetki problemi olabilir.
Kimlik bilgilerini doğrulayın.
Hedef sistemde kullanıcının aktif olduğunu kontrol edin.
Gerekli yetkilerin verildiğini kontrol edin.
SSL/TLS sertifikalarını kontrol edin.
Pool Exhausted
Pool size çok düşük, connection leak var veya trafik çok yüksek olabilir.
Pool size'ı artırın.
Connection'ların düzgün kapatıldığını kontrol edin.
Idle connection timeout'ları ayarlayın.
Connection kullanım metriklerini izleyin.
Connection Test Başarılı Ama Entegrasyon Akışı Hata Veriyor
Integration/Connector adımında farklı connection seçili olabilir, adım yanlış yapılandırılmış olabilir veya Flow/Job redeploy edilmemiş olabilir.
Connection'ın enable toggle'ının aktif olduğunu kontrol edin.
Integration Flow'da doğru connection'ın seçildiğini doğrulayın.
Connection'ı tekrar deploy edin.
Integration Flow veya Job'ı redeploy edin.
Gateway loglarını kontrol edin.
Sık Sorulan Sorular (SSS)
Kafka Connection ile birden fazla topic yönetebilir miyim?
Aynı Connection tek topic'e odaklanır, fakat farklı topic'ler için hızlıca çoğaltılabilir; bu sayede izinler ve monitoring ayrı tutulur.
Enable Secure kapalı bırakılabilir mi?
Development ortamı için mümkündür ancak Production'da TLS kapatılması önerilmez; güvenlik politikaları uyarınca açık bırakın.
PropertiesMap'e secret değerleri nasıl eklenir?
MapValue eklerken valueType olarak SECRET seçin; UI değerleri maskeler ve export sırasında şifrelenmiş saklanır.
Multi-broker yapılandırmasında sıralama önemli mi?
Broker listesi ilk ulaşılabilir sunucuya göre denenir; yüksek erişilebilirlik için DNS round-robin veya bootstrap listesi önerilir.
Test Connection başarısızsa Deployment yapabilir miyim?
Yapabilirsiniz ancak önerilmez; Deployment sonrası Integration Flow hata vermeye devam eder. Önce testteki hatayı düzeltin.
Aynı connection'ı birden fazla Integration Flow'da kullanabilir miyim?
Evet, aynı connection birden fazla Integration Flow veya Connector adımında kullanılabilir. Bu merkezi yönetim sağlar ve konfigürasyon tutarlılığını garanti eder. Ancak connection'da yapılan değişiklikler tüm kullanım yerlerini etkileyeceği için dikkatli olunmalıdır.
Connection pool kullanmak zorunlu mudur?
Connection pool kullanımı zorunlu değildir ancak yüksek trafikli sistemlerde şiddetle önerilir. Her istekte yeni bağlantı açmak yerine mevcut bağlantıları yeniden kullanmak performansı önemli ölçüde artırır.
Test ve Production için farklı connection'lar mı oluşturmalıyım?
Evet, her ortam için ayrı connection oluşturmanız önerilir. Alternatif olarak environment parametresini kullanarak tek connection içinde tüm ortamları yönetebilirsiniz. Bu yaklaşım daha kolay yönetim ve daha az hata riski sağlar.
Test Connection başarılı ama Integration Flow'da çalışmıyor, neden?
Birkaç neden olabilir:
- Connection enable toggle'ı pasif olabilir
- Integration adımında farklı bir connection seçili olabilir
- Connection deploy edilmemiş olabilir
- Integration Flow henüz redeploy edilmemiş olabilir