What is Kafka?
Apache Kafka, yüksek performanslı data pipeline'ları, streaming analitiği, veri entegrasyonu ve kritik uygulamalar için binlerce şirket tarafından kullanılan açık kaynaklı bir dağıtık event streaming platformudur.
- Message broker
- Indeks tabanlı mesaj okuma/yazma, bu nedenle Kafka hızlıdır
- Scala ve Java ile yazılmıştır
- Adını Franz Kafka'dan almıştır
- LinkedIn tarafından finanse edilmiştir
- Jay Kreps liderliğinde geliştirilmiştir
Özellikler
- Hızlı ( high throughput and low latency )
- Ölçeklenebilir ( Horizontally scalable with node and partitions )
- Güvenilir ( Fault tolerant and distrubuted )
- Dayanıklı ( Zero data loss, messages persisted to disk with immutable log )
Kullanım Alanları
- Application analytics
- Monitoring/Metrics
- Log collecting
- Stream processing
- Recommendation engine
- Fraud and anomaly detection
- Integrate systems
Kafka Kullanan Şirketler
- Uber
- Netflix
- Spotify
- Activision
- Slack
- Shopify
Kavramlar
- Producer
- Producer acknowledgment
- acks = 0, En hızlı ancak en riskli, veri kaybı olasılığı yüksek. Kafka'ya mesaj gönder, ancak yanıt beklemeyi bırak ve devam et.
- acks = 1, Orta düzeyde hızlı ve güvenli, veri kaybı olasılığı az. Kafka'ya mesaj gönder ve lider mesajı alana kadar bekle, takipçiler mesajı alana kadar bekleme.
- acks = all or -1, Daha yavaş ancak en güvenli, veri kaybı olasılığı yok. Mesaj gönder ve lider ile takipçiler mesajları alana kadar bekle
- Producer acknowledgment
- Consumer ( Assign 1 consumer to 1 partition ⇒ best practice )
- Read Stratejileri
- At Most Once
- At Least Once ( en çok kullanılan )
- Exactly Once ( transactional, performance impact )
- Read Stratejileri
- Partition ( event/message/record holder )
- Record/Event/Message ( each item in partition )
- Offset ( message position/index in partition )
- Topic ( partition holder )
- Kafka Broker ( topics holder )
- Consumer Group ( partition'lar için paralel işleme izin verir, pub-sub pattern gibi)
- Distrubuted Systems
- Leader ( Master )
- Follower ( Slave )
- Topic Based Scaling
- Partition Based Scaling
- Kafka Connect
- Kafka Streams
İlgili Teknolojiler
- Apache ZooKeeper ( Distribution management, Gossip Protocol ⇒ Who is leader? Who is slave? Ok you are leader, take this message )
- Confluent Cloud
- Apache Flink ( Stateful Computations over Data Streams **)**
- Apache Hadoop
Diğer Mesajlaşma Sistemlerinden Temel Farklar
- Kafka, bir mesaj tüketildikten sonra bir mesajı saklar. Tam tersine, rakip RabbitMQ mesajları hemen tüketildikten sonra siler.
- RabbitMQ, mesajları consumer'lara push'lar fakat Kafka, mesajları consumer'lardan pull eder.
- Kafka kolayca yatay olarak ölçeklenebilirken geleneksel mesaj kuyrukları dikey olarak ölçeklenebilir.