⚡ÖZET VE TEKNİK CEVAP
Apache Kafka'da bir topic'in partition'ları bir Consumer Grubunun üyeleri arasında paylaştırılır. Bir consumer gruba katıldığında, yeniden başladığında veya çöktüğünde Kafka Group Coordinator bir 'Rebalance' (Yeniden Dengeleme) tetikler: Gruptaki TÜM consumer'lar veri işlemeyi durdurmak, partition kilitlerini bırakmak ve yeni dağıtımı beklemek zorundadır ('Dünyayı Durduran' Eager Rebalance). Tek bir consumer ağır bir toplu işlemi işlerken max.poll.interval.ms süresini aşarsa (varsayılan 5 dk), Kafka onu 'ölü' sayıp kovar ve rebalance başlatır. O consumer işini bitirip tekrar poll() yaptığında gruba geri katılarak İKİNCİ bir rebalance daha tetikler. 50 pod'lu bir sistemde rolling restart yapıldığında saatlerce hiçbir mesajın işlenemediği felaket bir 'Rebalance Fırtınası' doğar. Çözüm, Cooperative Sticky Assignor ve Statik Grup Üyeliğidir (group.instance.id).
Mühendislik El Kitabı & Mekanizma
6 Boyutlu Mimari Analiz⚙️1. Temel Çalışma Mekanizması
Mekanizma🎯2. Doğru Kullanım Senaryosu
Kapsam⚠️3. Prodüksiyon Arıza Modları
Kritik Risk📡4. Teşhis ve Telemetri Sinyalleri
Metrikler🛡️5. Önleme ve Mimari Bariyerler
Bariyerler⚖️6. Mimari Ödünleşimler (Trade-offs)
ÖdünleşimVaka İncelemesi (TinyCTO Saha Örneği)
40 consumer pod'u olan bir veri platformu, her yeni sürüm canlıya çıktığında pod restart'ları yüzünden 25 dakikalık rebalance kilitlenmesi yaşıyordu. Ekip iki ayar yaptı:
CooperativeStickyAssignor stratejisine geçildi,
group.instance.id = pod-name ile statik üyelik açıldı. Sonraki 40 pod'luk güncellemede rebalance sayısı 40'tan tam olarak SIFIRA indi ve canlıya çıkış boyunca kuyruk gecikmesi 0 milisaniyede kaldı.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaKafka Consumer Grubu 'Rebalance Fırtınası' (Rebalance Storm) nedir?
Statik Grup Üyeliği (`group.instance.id`) rolling deployment sırasında rebalance'ları nasıl engeller?
Kafka Consumer Grubu Rebalance Fırtınaları ve Statik Üyelik (Static Membership) — Sıkça Sorulan Sorular
Bir uygulamanın mesaj işleme döngüsü `max.poll.interval.ms` süresini aşarsa ne olur?
Kafka koordinatörü o thread'in kilitlendiğini varsayar, tüketiciyi gruptan atar ve anında tüm grupta rebalance başlatır.
`session.timeout.ms` ile `max.poll.interval.ms` arasındaki fark nedir?
`session.timeout.ms` arka plan kalp atışlarının (ağ canlılığı) zaman aşımıdır; `max.poll.interval.ms` ise iki `poll()` çağrısı arasındaki maksimum işleme süresidir (uygulama sağlığı).
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸
Legacy eager rebalance halts message processing for the entire consumer group.
- ▸
Exceeding
max.poll.interval.mscauses the broker to evict the consumer as dead. - ▸
CooperativeStickyAssignor migrates partitions incrementally without stopping healthy consumers.
- ▸
Static Group Membership (
group.instance.id) enables zero-rebalance rolling deployments.
Yaygın Yanılgılar
- ✗
Yanılgı: Rebalances only affect the single pod that crashed (Gerçek: In eager rebalance, 100% of consumers in the group are frozen).
- ✗
Yanılgı: Increasing
max.poll.interval.msto 24 hours fixes slow consumers (Gerçek: It delays recovery when consumers actually crash; sizemax.poll.recordsinstead).
Karar Kılavuzu & Önceliklendirme
Set partition.assignment.strategy to CooperativeStickyAssignor across all Kafka consumers. Deploy Kafka consumers as Kubernetes StatefulSets with group.instance.id set to the pod hostname.
Doğrulanmış Kaynaklar & Referanslar
- [OFFICIAL_DOCUMENTATION]KIP-429: Kafka Incremental Cooperative Rebalancing Protocol— Apache Kafka / Confluent
