İçeriğe geç
Muhammet Şafak
en

Uzmanlık

Apache Kafka geliştiricisi — 2022'den beri

Partition sayısını artırmak kolay; asıl iş, aynı anahtarın başka bir partition'a düşüp sıralamayı bozabileceğini baştan hesaba katmak — Kafka kararlarını 2022'den beri bu bedelle birlikte veriyorum.

yıl
4

Kafka benim için bir kuyruk değil, tekrar okunabilir bir olay günlüğü. Bu fark, onu nerede seçeceğimi belirliyor: mesajın tüketildikten sonra da erişilebilir kalması gerekmiyorsa daha basit bir kuyruk çoğu zaman yetiyor. Bu seçimin genel çerçevesi Yazılım Mimarisi sayfasında.

Kafka ile işimin büyük kısmı üretici ve tüketici tarafındaki küçük kararlarda geçiyor: partition anahtarını neye bağlayacağım, tüketici sayısı partition sayısını aşınca ne olacağı, tekrar teslimin neyi bozacağı. Partition sayısı sonradan artırılabiliyor ama bunun anahtar-partition eşlemesini değiştirdiğini ve eski sıralama garantisini bozduğunu hesaba katıyorum.

Aynı omurga yapay zekâ tarafında da geçerli: event-driven iş akışları ve veri hatları için Yapay Zekâ Sistemleri rolünde kullandığım mesaj katmanı Kafka. Derin anlatı ve uzun yazılar Mühendislik bölümü tarafında.

Apache Kafka Geliştirici nedir?

Apache Kafka, olayları topic'lerde belirlenen süre boyunca saklayan, birden çok tüketicinin bunları istediği kadar okuyabildiği dağıtık bir event streaming platformudur. Topic'ler partition'lara bölünür ve sıralama garantisi yalnız bir partition içinde geçerlidir. Kafka geliştiricisi, üretici ve tüketici tarafını, anahtar seçimini ve ölçekleme kararlarını bu modelin üstüne kuran kişidir.

Apache Kafka Geliştirici ne iş yapar?

Kafka'yı event-driven iş akışlarında ve veri hatlarında mesaj omurgası olarak kullanıyorum. Çalışmam dört karar etrafında dönüyor: sıralamanın gerektiği en dar varlığı partition anahtarı yapmak, tüketici paralelliğini partition sayısıyla sınırlı bir tavan olarak görmek, teslimi at-least-once varsayıp tüketiciyi idempotent kurmak ve Kafka'yı yalnız tekrar okunabilir bir olay günlüğü gereken yerde seçmek.

Birlikte kullandığım teknolojiler

  • Apache Kafka

    Event-driven iş akışlarında ve veri hatlarında mesaj omurgası olarak kullandığım event streaming platformu.

  • RabbitMQ

    Servisler arası asenkron teslim; outbox relay'inin çıkış kapısı.

  • PostgreSQL

    Kuyruk tablosu ve index davranışını üzerinde ölçtüğüm veritabanı.

  • Redis

    Önbellek katmanında ilişkisel depoyla birlikte çalışan hızlı katman.

  • Docker

    Geliştirme ortamı ve dağıtım paketi.

  • Kubernetes

    Container'ların birden çok makinede çalıştırıldığı, ölçeklendiği ve yeniden başlatıldığı orkestrasyon katmanı.

Sık sorulanlar

8 soru

  • Kafka ile kaç yıldır çalışıyorsun?

    2022'den bu yana, 4 yıldır.

  • Kafka geliştirici ne iş yapar?

    Olayları Kafka'ya yazan üreticileri ve onları okuyan tüketicileri tasarlar; partition anahtarını, tüketici ölçeklemeyi ve teslim garantisini belirler. Bende bu, Kafka'yı event-driven iş akışlarının ve veri hatlarının mesaj omurgası olarak kurmak demek.

  • Kafka ile RabbitMQ arasında nasıl seçiyorsun?

    Teknolojiden önce ihtiyaca bakıyorum. RabbitMQ'yu servisler arası asenkron teslim için, outbox relay'inin çıkış kapısı olarak kullanıyorum. Kafka'yı, mesajın tüketildikten sonra da tekrar okunabilir kalması gereken, yani gerçek bir olay günlüğü istenen yerde seçiyorum.

  • Kafka'da varlık başına sıralamayı nasıl sağlıyorsun?

    Kafka sıralamayı yalnız bir partition içinde garanti ediyor, topic genelinde değil. Bu yüzden sıralamanın gerçekten gerektiği en dar varlığı partition anahtarı yapıyorum.

  • Exactly-once teslimin peşinden gidiyor musun?

    Hayır, sistemi at-least-once üzerine kuruyorum. Mesaj başına kararlı bir dedup anahtarı, işlenmiş mesaj tablosu ve üretici tarafında outbox ile tüketiciyi idempotent yapıyorum; tekrar teslim zararsız hale geliyor.

  • Kafka tüketicilerini ölçeklerken rebalancing kesintilerini nasıl azaltıyorsun?

    Önce partition.assignment.strategy'yi CooperativeStickyAssignor yapıyorum, böylece yalnız taşınan partition'lar duruyor. Ardından static membership ve autoscaler cool-down ile üye değişimini seyrekleştiriyorum.

  • Outbox tablosunu poll ederek mi yoksa Debezium CDC ile mi yayınlıyorsun?

    SKIP LOCKED, batch ve partial index'le ayarlanmış bir polling relay çoğu ekibe yetiyor. Debezium'a, gecikme ya da veritabanı yükü ölçülerek sıkıştığı yerde geçiyorum.

  • Kafka'yı yapay zekâ sistemlerinde nerede kullanıyorsun?

    Event-driven yapay zekâ iş akışlarında ve veri hatlarında mesaj omurgası olarak. Bu bağlamı [Yapay Zekâ Sistemleri sayfası](/tr/uzmanlik/ai-systems/) anlatıyor.

Birlikte çalışalım

Bu ekosistemde bir işiniz varsa, ne yaptığınızı anlatın; nasıl kurulacağını konuşalım.

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi