Apache Kafka'nın temel bileşenlerini ve kavramlarını detaylandıralım:
Broker (Sunucu): Kafka'nın temel yapı taşıdır ve bireysel bir Kafka sunucusunu ifade eder. Kafka, dayanıklılığı ve yüksek erişilebilirliği desteklemek için bir dağıtık sistem olarak tasarlanmıştır. Birden fazla broker'ın birleşimi bir Kafka kümesi oluşturur ve bunlar genellikle birbirleriyle koordinasyon içinde çalışır. Her broker, verilerin bir parçasını saklayabilir ve böylece hata durumunda bile sistemin çalışmaya devam etmesini sağlar.
Controller (Denetleyici): Kafka kümesindeki özel bir broker rolüdür. Cluster içerisinde bölüm liderlerini seçme gibi önemli yönetim görevlerinden sorumludur. Aynı zamanda, bir broker çöktüğünde veya bir bölüm yeniden replike edilmesi gerektiğinde bunu yöneten de controller'dır.
Consumer Group (Tüketici Grubu): Kafka'da, birden fazla tüketici uygulaması bir tüketici grubu oluşturabilir. Bu grup, her tüketiciye belirli bölümleri atayarak ve böylece mesajları daha hızlı işleyerek verimliliği artırır. Tüketici grupları, büyük veri akışlarını etkili bir şekilde işlemek için kullanılır.
Topic (Konu): Verilerin gruplandığı ana yapıdır ve bir veritabanındaki tabloya benzer. Mesajlar, ilgili oldukları konulara göre sınıflandırılır ve bu konular altında saklanır.
Partition (Bölüm): Her konu, mesajların saklandığı birden fazla bölüme ayrılır. Bölümler, Kafka'nın yüksek erişilebilirlik ve paralel işleme özelliklerini mümkün kılan yapıdır. Her bölüm kendi içinde sıralıdır ve birden fazla üretici ve tüketici tarafından yazma/okuma işlemleri gerçekleştirilebilir.
Replica (Kopya): Kafka'nın hata toleransını sağlamak için her bir bölümün birden fazla kopyası bulunur. Bu kopyalar farklı broker'larda saklanır ve böylece bir broker çöktüğünde veri kaybı olmadan sistemin devam etmesi sağlanır.
Leader (Lider): Replikasyon sürecinde, her bölümün bir lider kopyası vardır. Bu lider kopya, bölüm için yazma ve okuma işlemlerinin yapıldığı asıl noktadır.
Follower (İzleyici): Lider dışındaki diğer kopyalar izleyicidir. Bunlar, lider kopyanın bir kopyasını tutar ve sürekli olarak liderden güncellemeleri alır. Bir izleyici, gerekli şartlar altında lider rolüne terfi edebilir.
Producer (Üretici): Kafka'ya mesaj gönderen uygulamalardır. Kafka Clients kütüphanesini kullanarak, üreticiler verileri Kafka broker'larına kaydeder.
Consumer (Tüketici): Kafka'dan mesaj okuyan uygulamalardır. Yine Kafka Clients kütüphanesini kullanarak, tüketiciler belirledikleri konulardan veya bölümlerden veri çekebilirler.
Message / Record (Mesaj / Kayıt): Üreticiler tarafından Kafka'ya gönderilen ve tüketiciler tarafından okunan veri birimleridir. Kafka'da bu veri birimlerine hem mesaj hem de kayıt denir ve bu terimler genellikle birbirlerinin yerine kullanılır.
Log (Kayıt Defteri): Broker'lar üzerinde saklanan mesajların immutable (değiştirilemez) ve sıralı bir yapıdır. Her bir bölümün log'u, o bölümdeki mesajların zaman sırasına göre sıralı bir kaydını tutar. Kafka'nın temelinde bu log yapısı yatar ve veri bütünlüğü ile güvenilirliğin temelini oluşturur.
Offset: Kafka içinde her bir mesajın veya kaydın log üzerindeki benzersiz konumunu belirleyen bir indekstir. Offset, bir bölüm içindeki mesajın sırasını ifade eder ve tüketicilerin hangi mesajı son olarak okuduklarını takip etmelerini sağlar. Böylece, bir tüketici herhangi bir zaman veri akışına bağlanabilir ve kaldığı yerden devam edebilir.
Topic-Partition-Replica Hierarchy (Konu-Bölüm-Kopya Hiyerarşisi): Kafka'nın veri saklama yapısını ifade eder. Bir konu içinde, belirli bir veri seti üzerinde paralel işlemleri mümkün kılmak için bölümlere ayrılmıştır. Her bölüm kendi içinde bir ya da daha fazla kopyaya (replica) sahip olabilir, bu kopyalar genellikle farklı brokerlar üzerinde dağıtılır. Her bir bölümün lider kopyası üzerinde yazma işlemleri gerçekleştirilirken, izleyici kopyalar lideri takip eder ve verinin güvenilir bir şekilde korunmasını sağlar.
Bu terimler, Kafka'nın nasıl çalıştığına dair genel bir anlayış sağlar ve Kafka'yı kullanarak büyük veri akışlarını işlemek, saklamak ve analiz etmek isteyenler için temel bilgileri içerir. Kafka, büyük ölçekte veri akışlarını yönetmek, güvenilir ve hızlı bir şekilde mesajlaşma yapmak için kullanılan bir platformdur ve bu temel bileşenlerin anlaşılması, Kafka'nın etkili bir şekilde kullanılmasının önemli bir parçasıdır.
Bu kavramlar hakkında SSS ve cevapları
Apache Kafka ile ilgili sıkça sorulan sorular (SSS) ve cevapları şunlardır:
1. Kafka Broker nedir?
Broker, Kafka'nın temel bir sunucusudur ve bir Kafka kümesinin bireysel bileşenidir. Birden fazla broker, yüksek erişilebilirlik ve ölçeklenebilirlik sağlamak için bir arada çalışır.
2. Kafka Controller'ın görevi nedir?
Controller, Kafka kümesindeki lider seçimleri gibi küme yönetim işlemlerini yürüten özel bir broker rolüdür. Ayrıca sistemdeki arızaları yönetir ve hata durumunda bölüm replikasyonunu koordine eder.
3. Consumer Group ne işe yarar?
Consumer Group, Kafka'dan veri okuma işini bölerek daha verimli bir veri işleme sağlar. Her tüketici, belirli bölümlere atanır ve böylece bir grup içinde iş yükü paylaşılır.
4. Kafka Topic'leri nasıl çalışır?
Topic'ler, benzer verilerin gruplandığı kategorilerdir. Bir veritabanındaki tablolar gibi düşünülebilir ve her topic, mesajları saklamak için bölümlere ayrılır.
5. Partition ve Replica kavramları ne anlama gelir?
Partition, bir topic'in alt bölümleridir ve her bölüm kendi içinde sıralıdır. Replica ise, bir bölümün kopyalarıdır ve hata toleransını sağlamak için farklı brokerlarda tutulur.
6. Kafka'da Leader ve Follower terimleri neyi ifade eder?
Her Kafka bölümünün bir lider (leader) replikası vardır ve tüm yazma ve okuma işlemleri bu lider üzerinden gerçekleşir. Follower replikalar, liderin bir kopyasını tutar ve veriyi sürekli olarak eşler.
7. Producer ve Consumer arasındaki fark nedir?
Producer, Kafka'ya mesaj gönderen uygulamadır, Consumer ise Kafka'dan mesaj okuyan uygulamadır.
8. Kafka'da Message / Record ne anlama gelir?
Kafka'da her bir veri birimi mesaj veya kayıt olarak adlandırılır. Bunlar, Producer tarafından gönderilir ve Consumer tarafından okunur.
9. Log ve Offset kavramları ne işe yarar?
Log, Kafka bölümlerindeki mesajların sıralı ve değiştirilemez kaydını tutar. Offset ise, bir mesajın bölüm içindeki sıralı pozisyonunu belirtir ve tüketicilere kaldıkları yerden devam etmelerini sağlar.
10. Topic-Partition-Replica Hierarchy neyi ifade eder?
Bu, Kafka'nın veri saklama yapısını tanımlar. Bir topic, birden fazla bölüme ayrılabilir ve her bölüm, veri bütünlüğü ve erişilebilirliği için replikalara sahip olabilir.
Bu SSS, Kafka'nın temel bileşenleri ve onların işlevleri hakkında daha iyi bir anlayış kazanmak isteyenler için başlangıç noktası olabilir. Kafka ile ilgili daha derin sorular, kurulum, yapılandırma ve en iyi uygulamalar gibi konular, kullanıcıların ihtiyaçlarına ve kullanım senaryolarına göre genişleyebilir.
Kafkadaki offset yapısının detaylı çalışma mantığı
Apache Kafka'da offset yapısı, Kafka'nın mesajları nasıl sakladığı ve tüketicilerin mesajları nasıl okuduğu ile yakından ilişkilidir. İşte offset yapısının detaylı çalışma mantığı:
Offset Nedir?
Offset, Kafka'da her bir mesajın bölüm içerisindeki sırasını belirten sayısal bir değerdir. Bir Kafka bölümü log olarak adlandırılan sıralı bir mesaj setini tutar ve her mesaj bu log içinde artan bir offset ile etiketlenir.
Offset'in Çalışma Mantığı:
Sıralı Depolama:
Her Kafka bölümünde, mesajlar oluşturuldukları sırayla depolanır.
Yeni bir mesaj gönderildiğinde, bu mesaj bölümün log'unun sonuna eklenir ve bir sonraki kullanılabilir offset ile etiketlenir.
İmmutability:
Bir mesaj log'a yazıldıktan sonra, o mesaj değiştirilemez (immutable). Bu, mesajın offset'inin de sabit kalacağı anlamına gelir.
Tüketici İzleme:
Tüketiciler, hangi mesajları okuduklarını offset'lerine göre takip eder.
Tüketici, bir sonraki okuması gereken mesajın offset'ini bilir ve bu bilgiyi kendi durum bilgisinde (genellikle Zookeeper veya Kafka'nın kendi içindeki __consumer_offsets topic'inde) saklar.
Ölçeklenebilirlik:
Kafka, her bir tüketiciye veya tüketici grubuna, okunacak son offset'i saklayarak ölçeklenebilirlik sağlar. Bu, çok sayıda tüketici aynı veri setini bağımsız olarak okuyabilir ve kendi okuma durumlarını yönetebilir.
Mesaj Yeniden İşleme ve Atlanması:
Tüketiciler, bir mesajı yeniden işlemek istediklerinde veya belirli bir mesajı atlamak istediklerinde offset'i kullanarak ileri veya geri gidebilirler.
Bu, hata durumlarını yönetme veya veri işleme sırasında esneklik sağlar.
Garanti Edilen Teslimat:
Offset mekanizması, Kafka'nın "en az bir kez teslim" garantisi sağlamasına yardımcı olur. Tüketici bir mesajı işlediğini ve bir sonraki offset'e geçmeye hazır olduğunu onaylamadan önce, mesajın işlenip işlenmediği tekrar kontrol edilebilir.
Dayanıklılık:
Kafka, offset bilgilerini disk üzerinde saklar. Bu, sistemin yeniden başlatılması veya bir hata durumunda dahi tüketici gruplarının kaldıkları yerden devam etmelerini sağlar.
Otomatik Offset Yönetimi:
Kafka 0.9 sürümünden itibaren, tüketiciler offset'lerini otomatik olarak yönetebilir. Bu, tüketicinin okuduğu son mesajın offset'ini otomatik olarak Kafka'nın kendisine kaydetmesi anlamına gelir.
Manuel Offset Kontrolü:
Tüketiciler, gelişmiş kullanım senaryolarında offset'leri manuel olarak kontrol edebilirler. Bu, daha fazla kontrol sağlar ve özel işleme lojikleri uygulamaya olanak tanır.
Tutarlılık ve İzlenebilirlik:
Offset'ler, mesaj işleme sürecinin tutarlı ve izlenebilir olmasını sağlar. Tüketicilerin işledikleri mesajları ve potansiyel hata durumlarını anlamalarına yardımcı olur.
Kafka'nın offset yapısı, güvenilir ve ölçeklenebilir bir mesajlaşma sistemi oluşturmak için kritik bir rol oynar
Manuel Offset Kontrolü tam olarak nasıl çalışır?
Apache Kafka'da manuel offset kontrolü, tüketici uygulamaların, Kafka'nın otomatik offset yönetim mekanizmalarına güvenmek yerine, kendi offset yönetimlerini yapmalarını sağlar. Bu, gelişmiş kullanım senaryolarında faydalı olabilir, örneğin, uygulama yalnızca belirli koşullar altında mesajları işlediği zaman veya mesajları işlemeden önce ek doğrulama adımları gerektiğinde.
İşte manuel offset kontrolünün nasıl çalıştığına dair adımlar:
Auto-Commit Devre Dışı Bırakma:
Tüketici uygulamasında otomatik offset commit özelliğini devre dışı bırakın. Kafka tüketicisi yapılandırmasında enable.auto.commit seçeneğini false olarak ayarlayarak bunu yapabilirsiniz.
Mesaj İşleme:
Tüketici, Kafka'dan mesajları alır ve uygulamanızın iş mantığına göre işler.
Offset Saklama:
Tüketici, işlediği mesajın offset'ini bir yerde saklar. Bu, genellikle uygulama tarafından yönetilen bir veritabanında, dosyada veya Kafka'nın kendisinde bir topic içinde olabilir.
Offset Taahhütü (Commit):
Tüketici, bir mesajı başarıyla işledikten sonra, ilgili offset'i Kafka'ya taahhüt eder (commit). Bu, consumer.commitSync() veya consumer.commitAsync() metotlarıyla yapılabilir.
Hata Yönetimi:
İşlenen mesajlarda bir hata olursa veya işleme başarısız olursa, tüketici daha önce taahhüt edilen offset'ten başlayarak mesajları tekrar okumaya başlayabilir. Böylece, mesajların kaybolmasını veya atlanmasını önleyebilir.
Geri Sarım (Replay):
Uygulama, işlenen bir mesajın sonuçlarından memnun değilse veya bir hata oluşursa, offset'i geri sarabilir ve işleme tekrar başlayabilir.
İşleme Garantisi:
Manuel offset kontrolü, "en az bir kez", "tam olarak bir kez" veya "en fazla bir kez" işleme garantilerinden herhangi birini sağlamak için özelleştirilebilir.
Manuel offset yönetimi, Kafka tüketici API'sinin karmaşık ancak güçlü özelliklerinden biridir ve uygulama geliştiricilere mesaj işleme davranışını tam olarak kontrol etme olanağı sunar. Ancak, bu yaklaşımın doğru ve dikkatli bir şekilde uygulanması gerekir çünkü mesajların işlenmesi ve offset yönetimi konusunda tam bir sorumluluk gerektirir. Yanlış yönetilen offset'ler, mesajların tekrar işlenmesine veya kaybolmasına neden olabilir.
Otomatik Offset Kontrolü tam olarak nasıl çalışır?
Apache Kafka'da otomatik offset kontrolü, Kafka tüketicisinin okuduğu mesajların offset'lerini otomatik olarak yönettiği bir işlemdir. Bu, tüketicilerin işledikleri her bir mesaj için offset'i manuel olarak commit etmelerine gerek kalmadan, işlemi Kafka'ya bıraktıkları anlamına gelir.
İşte otomatik offset kontrolünün nasıl çalıştığına dair bir açıklama:
Yapılandırma Ayarı:
Kafka tüketici istemcisinde, enable.auto.commit yapılandırma seçeneğini true olarak ayarlayarak otomatik offset taahhüdünü etkinleştirirsiniz. Bu seçenek varsayılan olarak etkindir.
Taahhüt Aralığı:
Otomatik commit interval'ı auto.commit.interval.ms yapılandırma parametresi ile belirlenir. Bu, Kafka'nın okunan offset'leri ne sıklıkta otomatik olarak commit edeceğini belirler.
Aralıklı Commit:
Belirlenen aralıklarla, Kafka tüketici istemcisi, son okuduğu offset'i otomatik olarak commit eder. Bu işlem, mesajları işleme kodunuzun dışında, arka planda çalışır.
İşleme Durumunun Takibi:
Tüketici, mesajları işlemeye devam eder ve offset'lerin düzenli olarak commit edildiğinden endişelenmez. Eğer uygulama çökerse veya yeniden başlatılırsa, tüketici en son commit edilmiş offset'ten mesaj okumaya devam edebilir.
Hata Durumları:
Otomatik commit kullanılırken, bir mesaj işlenirken bir hata oluşursa ve uygulama hemen çökmezse, bu mesaj yeniden işlenemeyebilir çünkü offset zaten commit edilmiş olabilir. Bu, "en az bir kez" işleme garantisi sağlar ancak "tam olarak bir kez" garantisini sağlamaz.
Otomatik Yeniden Deneme:
Kafka, işlenen mesajlar için otomatik olarak yeniden deneme mekanizması sağlar. Bir mesaj başarısız olursa, tüketici otomatik olarak yeniden deneyebilir, bu da işlem sırasında kısa süreli hataları tolere etmeye yardımcı olur.
Kolaylık ve Basitlik:
Otomatik offset yönetimi, özellikle basit tüketici uygulamaları için kullanışlıdır çünkü mesaj işleme mantığına odaklanmanıza olanak tanır ve offset'leri manuel olarak yönetme karmaşıklığını ortadan kaldırır.
Otomatik offset kontrolü, genel kullanım için kolaylık sağlasa da, işleme sırasında kesin kontrol ve garanti edilmiş mesaj işleme davranışları gerektiren durumlarda manuel offset kontrolü tercih edilir. Özellikle, mesajların işlenmesi sırasında kesin bir konsistensi gerektiren uygulamalarda, otomatik offset kontrolü yeterli olmayabilir ve geliştiricilerin manuel kontrolü kullanmaları önerilir.
Apache Kafka'daki grup yapısı, tüketicilerin daha etkili bir şekilde mesajları işlemelerini sağlamak için kullanılan bir yapıdır. Bu grup yapısı, birden fazla tüketiciyi aynı veri akışını işlemek için koordine etmeye ve veriyi paralel olarak işlemeye olanak tanır. Kafka'daki grup yapısı ve nasıl çalıştığı aşağıda açıklanmıştır:
Kafka Tüketici Grubu Nedir?
Kafka'da tüketici grupları, aynı konu (topic) veya konu bölümü (topic partition) üzerinde çalışan birden fazla tüketici uygulamasının bir araya geldiği bir yapıdır. Bu gruplar, veri işleme yükünü paylaşarak işlemi paralel hale getirmeye yardımcı olur.
Tüketici Gruplarının Avantajları:
Paralel İşleme: Tüketici grupları, veri akışını paralel olarak işleyebilir, bu da veriyi daha hızlı işlemeyi ve ölçeklemeyi mümkün kılar.
Yüksek Erişilebilirlik: Bir tüketici grubunda bir tüketici uygulaması çökerse, diğerleri çalışmaya devam edebilir, böylece kesintisiz veri işlemesi sağlanır.
Konu Bölümü Atama (Topic Partition Assignment): Kafka, konu bölümlerini tüketici grupları arasında otomatik olarak paylaştırır, böylece tüketici uygulamaları veriyi eşit olarak işler.
Ölçeklenebilirlik: Yeni tüketici uygulamaları eklemek, veri işleme kapasitesini artırmak için kolaydır.
Tüketici Grubu Çalışma Mekanizması:
Tüketici Grubunun Oluşturulması: Bir tüketici grubu oluşturulurken, grup bir ad ve grup kimliği (group id) ile tanımlanır. Bu kimlik, Kafka'ya ait bir konfigürasyon olarak saklanır.
Konu Bölümlerinin Atanması: Tüketici grubu oluşturulduğunda, Kafka tarafından otomatik olarak konu bölümleri (topic partitions) grup üyelerine atanır. Bu atama, tüketici grubu üyeleri arasında adil bir şekilde yapılır ve her bir grup üyesi belirli bölümleri işlemekle sorumludur.
Veri İşleme: Her grup üyesi, kendisine atanan konu bölümlerini okur ve veriyi işler. Bu işlem sırasında mesajlar offset'leri ile işaretlenir ve bu offset'ler grup içinde saklanır.
Offset Yönetimi: Tüketici grubu üyeleri, okudukları mesajların offset'lerini düzenli aralıklarla veya otomatik olarak Kafka'ya taahhüt ederler (commit). Bu taahhüt, tüketici grubunun kaldığı yerin takip edilmesini sağlar.
Grup Koordinasyonu: Tüketici grubu, grup içi koordinasyon için bir grup koordinasyon hizmeti (group coordinator) kullanır. Bu hizmet, grup üyeleri arasındaki iletişimi ve konu bölümü atamalarını yönetir.
Yüksek Erişilebilirlik: Kafka, grup koordinasyon hizmetini yönetmek için birden fazla broker'da yedekleme olarak çalıştırabilir, böylece yüksek erişilebilirlik sağlar.
Grup Yönetimi: Grup içindeki üyelerin katılması, ayrılması ve çökmesi gibi grup yönetimi işlemleri Kafka tarafından otomatik olarak ele alınır.
Tüketici grupları, Kafka'nın ölçeklenebilir ve güvenilir bir mesajlaşma platformu olarak kullanılmasını kolaylaştırır ve büyük veri akışlarını etkili bir şekilde işlemek için güçlü bir araçtır.